2019-04-20面试题:简述MySQL中的事务

本文深入解析数据库事务的概念,包括原子性、一致性、隔离性和持久性的四大原则,以及如何在MySQL中正确使用事务来保证数据完整性和一致性。同时,提供了一些实用的事务使用技巧和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是事务

概念:事务是作为一个独立单元的一组有序的数据库操作。如果一组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作成功完成,事务则被提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(roll back),该事务所有操作的影响都将被取消。

事务期间所造成的任何修改只作用于拥有该事物的线程,并一直保持如此,直到所有修改确实被提交。这就防止了其他线程可能利用很快就会因为回滚而取消的数据,否则这会破坏数据的完整性。

4个原则:

原子性:事务的所有步骤都必须成功完成;否则,任何步骤都不会被提交。

一致性:事务的所有步骤都必须成功完成;否则,所有数据都将恢复到事务开始之前的状态。

隔离性:未完成事务所做的步骤必须与系统隔离,直到认为事务完成为止。

持久性:所有提交的数据都必须由系统以某种方式保存:使得一旦系统出现故障,数据可以成功地返回到合法的状态。

可以使用 SHOW ENGINES 命令查看你的 MySQL 服务器支持的所有存储引擎。

2. 用法提示

这里给出使用 MySQL 事务时要记住的一些提示。

启动 START TRANSACTION 命令与将 AUTOCOMMIT 变量设置为0是一样的。默认值为 AUTOCOMMIT=1,这意味着每条语句都会在成功执行后被马上提交。这就是用 START TRANSACTION 命令开始事务的原因,因为你并不希望事务的每个部分一旦执行就被提交。

只有在必须保证整个过程成功执行时才是用事务。例如,向购物车增加一件商品时,就必须整个过程都成功执行,而浏览所有可购买的商品时,这一点则并不重要。在设计表时要考虑这些问题,因为这会影响性能。

不能回滚数据定义语言(DDL)语句,即任何用于创建或删除数据库,以及创建、删除或修改表的语句。

事务无法嵌套。在 COMMIT 和 ROLLBACK 前执行多个 START TRANSACTION 命令没有意义。

如果在事务期间更新一个非事务表,然后用 ROLLBACK 结束事务,将返回一个错误,提示非事务表无法回滚。

要经常创建 InnoDB 数据和日志的快照(为此需要备份二进制日志文件,以及使用 mysqldump 创建每个表中数据的快照)。

本文章内容来自于 《PHP与MySQL程序设计》 书中第37章,在这里写一遍可以加深记忆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值