Q #1) MySQL 事务是原子的吗?
答:是的,事务是通过概念在 MySQL 中实现原子性的。
atomic 的简单含义是——ALL 或 NONE 和 MySQL 事务完全支持这一点。在这里,如果没有错误,那么所有的语句都会被执行。但是,如果出现任何差异或错误,则不会执行事务中的任何语句。
Q #2) 如何回滚 MySQL 事务?
答:事务可以提交或回滚/恢复。要恢复事务的更改,您只需在执行 COMMIT 之前运行 ROLLBACK 命令。
例如,参考下面的事务,我们使用 ROLLBACK 来恢复事务期间所做的更改。
START TRANSACTION; --statement1 UPDATE bankaccounts SET funds=funds-100 WHERE accountno='ACC1'; --statement2 UPDATE bankaccounts SET funds=funds+100 WHERE accountno='ACC2'; --statement3 ROLLBACK; --statement4
Q #3) 如何修复 MySQL 中事务的锁等待超时超时?
答:发生此错误的原因有两个。这些是:
等待事务完成时锁定超时已过期/已过。
该事务正在等待/依赖于另一个事务以获取对表的访问权。
使用名为“innodb_lock_wait_timeout”的环境变量配置超时
此变量的默认值为 50 秒。如果您预计交易花费的时间比这更长,那么这个值可以根据要求增加或减少。这可以防止用户收到“超过锁定等待超时错误”。
要获取此变量的当前值,请执行以下命令:
显示变量,如“innodb_lock_wait_timeout”;
并且要设置/更新此变量的值,您可以使用:
SET innodb_lock_wait_timeout=100;
Q #4) MySQL 是否支持嵌套事务?
答:不可以,MySQL 事务不能嵌套。这是因为每当您启动事务时,它都会隐式提交到本地磁盘(然后在最终提交发生时最终写入磁盘)。
想象一下在嵌套事务中使用同一个表,那么内部事务为已经是外部事务一部分的表获取锁将是不确定的。
Q #5) 什么是 XA 交易?
回答: XA 事务是分布式事务,即数据库系统是分布式的(并且本质上由不同的主机表示)
XA 事务遵循 2 阶段提交协议 -
在第一阶段,事务管理器获取事务中所有请求资源的锁。
在第二阶段,事务管理器根据事务语句的结果提交或回滚。
Q #6) DDL 语句可以回滚吗?
答:有些语句不能回滚,比如 DDL(数据定义语言)语句。例如,创建表、更改表、删除字段或表等。如果在事务中使用这些语句并且需要回滚,则这些语句将从列表中排除。
在本教程中,我们了解了 MySQL 中事务的基础知识。我们还了解了 COMMIT 和 ROLLBACK 命令,并使用它们的用法验证了它们。
事务是跨应用程序非常频繁使用的数据库功能,其中需要保留事务属性,即 ACID – 原子性、一致性、隔离性和持久性。