mysql 锁表锁行语句分享(MySQL事务处理)

2019-01-03 18:19:38王冬梅

开始一项事务会造成一个隐含的UNLOCK TABLES被执行。
为了获得最好的结果,事务应只使用由单一事务存储引擎管理的表执行。否则,会出现以下问题:
如果您使用的表来自多个事务安全型存储引擎(例如InnoDB和BDB),并且事务隔离等级不是SERIALIZABLE,则有可能当一个事务提交时,其它正在进行中的、使用同样的表的事务将只会发生由第一个事务产生的变更。也就是,用混合引擎不能保证事务的原子性,并会造成不一致。(如果混合引擎事务不经常有,则您可以根据需要使用SET TRANSACTION ISOLATION LEVEL把隔离等级设置到SERIALIZABLE。)
如果您在事务中使用非事务安全型表,则对这些表的任何变更被立刻存储,不论autocommit模式的状态如何。
如果您在更新了事务中一个事务表之后,发布一个ROLLBACK语句,则会出现一个ER_WARNING_NOT_COMPLETE_ROLLBACK警告。对事务安全型表的变更被 回滚,但是对非事务安全型表没有变更。
每个事务被存储在一个组块中的二进制日志中,在COMMIT之上。被回滚的事务不被计入日志。(例外情况:对非事务表的更改不会被 回滚。如果一个被回滚的事务包括对非事务表的更改,则整个事务使用一个在末端的ROLLBACK语句计入日志,以确保对这些表的更改进行复制。)
您可以使用SET TRANSACTION ISOLATION LEVEL更改事务的隔离等级。
回滚可以慢速运行。在用户没有明确要求时,也可以进行回滚(例如,当错误发生时)。因此,在明确地和隐含的(ROLLBACK SQL命令)回滚时,SHOW PROCESSLIST会在Stage列中显示Rolling back,用于连接。

您可能感兴趣的文章:

mysql锁表和解锁语句分享MySQL行级锁、表级锁、页级锁详细介绍通过mysql show processlist 命令检查mysql锁的方法MySQL Innodb表导致死锁日志情况分析与归纳Mysql数据库锁定机制详细介绍MYSQL锁表问题的解决方法详解MySQL中的死锁情况以及对死锁的处理方法一次Mysql死锁排查过程的全纪录mysql 数据库死锁原因及解决办法mysql数据库锁的产生原因及解决办法MySQL死锁问题分析及解决方法实例详解MySQL中Innodb的事务隔离级别和锁的关系的讲解教程Mysql(MyISAM)的读写互斥锁问题的解决方法mysql锁定单个表的方法查找MySQL线程中死锁的ID的方法Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)Mysql 数据库死锁过程分析(select for update)MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解