mysql事务

网友投稿 616 2022-10-10

mysql事务

mysql事务

上面做了关于存储引擎的测试,一开始我是没有把“自动提交事务”关闭,所以插入速度很慢,手动关闭“自动提交事务”后,性能非常好,这里我们就研究一下mysql事务。

事务必须满足4个条件(ACID):

原子性(Atomicity)。一个事务(transaction)中的所有操作,是一个整体的,要么是全部执行完成,要么全部不执行完成。所以在执行过程中出现问题,就会被回滚(rollback)到事务开始前的状态。一致性(Consistency)。一致性,是指数据库层面,并不是数据库操作之后,表数据前后一致。是指在事务开始前后,数据库的完整性没有被破坏。隔离性(Isolation)。在实际应用中,我们经常遇到多并发事务操作,对数据进行读写或者修改。那么数据库的事务隔离可以防止多个事务并发执行由于交叉执行而导致数据错乱、不一致。当然,数据库也考虑大家再使用过程中是多样性的,所以数据库隔离性也是分为不同级别,可分为读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。持久性(Durability)。正常来说,事务正常执行后,即对数据进行了修改,而且还是永久的。

我们常用的事务处理方法有以下两种:

通过begin、roolback、commit来实现。

提前建好表:

CREATE TABLE tran_t ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'id', num VARCHAR(25) NOT NULL COMMENT '编号' )

第一种情况:正常插入数据。

BEGININSERT INTO tran_t(num) VALUES(1);

我们先执行这两条语句,然后看看表里是否已经插入数据。

可以看出,数据还是没有成功插入进去,这就是事务的作用。你必须提交事务之后,才能成功插入。接着,我们执行commit语句。

COMMIT

我们再到表里看看是否已经插入数据。

可以看到,我们已经成功插入数据。因此,我们在插入数据的时候,可以通过事务方式来执行,主要是以下流程。

BEGININSERT INTO tran_t(num) VALUES(1);COMMIT

以上是我们正常插入数据时,但有时我们插入数据时,发现是误操作,需要回退回去,这时就可以用到roolback。

我们一次性执行以下语句:

BEGININSERT INTO tran_t(num) VALUES(2);ROLLBACK

然后,我们去表里看看是否有第二条记录。

可以看到,是没有插入数据。

第二种方式,是通过SET AUTOCOMMIT来控制是否自动提交事务。默认是自动提交的,上个章节我已经演示过,这里就不再详述。​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker安装tomcat
下一篇:microbundle- 小型模块零配件打包程序(microbundle babel)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~