这篇文章主要介绍MySQL中事务控制对的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

什么是事务控制

事务是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功,要么全部失败。事务确保了多个数据的修改作为一个单元来处理。

在MySQL中,只有使用了Innodb存储引擎的数据库或表才支持事物

事务用于维护数据库的完整性,保证成批的sql语句要么都执行,要么都不执行

事务用于管理INSERT、UPDATE和DELETE语句

假如,张三在ATM机上给李四转账100元,在银行的业务系统中,主要会执行两步数据变更操作:

从张三的账户减去100元

给李四的账户增加100元

试问,如果操作1执行成功,操作2执行失败会发生什么?

事务的四个特性

如果某个数据库支持事务,那么该数据库必须具备ACID四个特性,即Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

原子性:事务必须是原子工作单元,事务中包含的各操作要么都做,要么都不做

一致性:事务在执行完成时,必须使所有的数据都保持一致状态

隔离性:事务独立运行。多个事务之间相互隔离,互不干扰。事务的100%隔离,会牺牲速度

持续性:事务执行完成之后,它对系统的影响是永久性的

MySQL的事务控制

在默认情况下,MySQL是自动提交事务的,即每一条INSERT、UPDATE、DELETE的SQL语句提交后会立即执行COMMIT操作。因此,要开启一个事务,可以使用start transaction或begin,或者将autocommit的值设置为0.

方法一:

方法二:

例子

登陆数据库,使用student数据库并查看所有的数据表

USEstudent;SHOWTABLES;


2. 创建bank_account数据表并插入两条记录,设置张三的balance字段值+1000

CREATETABLEbank_account(idINTNOTNULLAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(30)COMMENT'姓名',balanceDECIMAL(18,2)COMMENT'账户余额');INSERTINTObank_account(id,name,balance)VALUE(1,'张三',0);INSERTINTObank_account(id,name,balance)VALUE(2,'李四',0);UPDATEbank_accountSETbalance=balance+1000WHEREid=1;


3. 查看默认的autocommit值

SELECT@@autocommit;


4. 查看bank_account数据表所有记录

SELECT*FROMbank_account;


5. 开始事务控制并执行两条SQL语句

STARTTRANSACTION;UPDATEbank_accountSETbalance=balance-100WHEREid=1;UPDATEbank_accountSETbalance=balance+100WHEREid=2;COMMIT;


6. 查看此时数据表的内容

SELECT*FROMbank_account;


7. 再次开始事务控制,同样插入两条一样的SQL语句,但将commit(提交)变为rollback(回滚)

STARTTRANSACTION;UPDATEbank_accountSETbalance=balance-100WHEREid=1;UPDATEbank_accountSETbalance=balance+100WHEREid=2;ROLLBACK;


8. 再次查看数据表内容,发现回滚之后数据无变化

SELECT*FROMbank_account;


注:本文是博主MySQL学习的总结,不支持任何商用,转载请注明出处!如果你也对MySQL学习有一定的兴趣和理解,欢迎随时找博主交流~

以上是“MySQL中事务控制对的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!