• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL InnoDB事务编写语法

MySQL 彭东稳 9年前 (2016-06-19) 26836次浏览 已收录 0个评论

一、事务控制语句

对于一个事务存储引擎来说如果没有明确启动一个事务,默认是能实现自动提交每一个操作都能直接提交。而MySQL默认采用自动提交模式。也就是说,在 InnoDB 中,所有的用户操作均是以事务方式处理的如果不是显式地开始一个事务,每个 SQL 语句将以一个单独的事务来处理。MySQL 通常是以自动提交方式建立一个服务连接的。查看变量autocommit就是控制事务是否自动提交的变量。

1ON表示启用,0OFF表示禁用。当AUTOCOMMIT=0时,所有的操作都是在一个事务中,直到显式地执行COMMIT提交或者ROLLBACK回滚,该事务就结束,但同时又开始了另外一个事务。修改AUTOCOMMIT对非事务型的表,不会有任何影响。对这类表来说没有提交和回滚的概念。也可以说是相当于一只处于AUTOCOMMIT启用的模式。

MySQL可以通过执行“set transaction isolation level”命令来设置隔离级别,新的隔离级别会在下一个事务开始的时候生效。也可以在配置文件中设置这是数据库需要重启MySQL全局生效此隔离级别,InnoDB的隔离级别有(READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE)。

1. 配置文件中修改

2. 只改变当前会话的隔离级别

既然默认关闭了自动提交事务,那么在默认提交关闭的情况下,开始一个事务必须使用BEGINSTART TRANSACTION语句,但是在存储过程中开启一个事务不能使用BEGIN,因为MySQL分析会自动降BEGIN识别为BEGIN….END,因此在存储过程中只能使用START TRANSACTION语句来开启一个事务。具体使用方式如下:

1) START TRANSACTION/BEGIN

BEGINSTART TRANSACTION显示地开启一个事务。

2)COMMIT

COMMIT提交事务,并使得已对数据库做的所有修改成为永久性。

3)ROLLBACK

回滚事务并结束事务,并撤销正在进行的所有未提交的事务的修改。

4)SAVEPOINT TO indentifier

SAVEPOINT允许你在事务中创建一个保存点作为一个可恢复对象,一个事务中可以有多个SAVEPOINT。

5)RELEASE SAVEPOINT identifier

删除一个事务的保存点,当没有保存点执行此语句或抛出异常。

6)ROLLBACK indentifier

回滚到指定的保存点。

二、实例操作

提交事务

回滚事务

SAVEPOINT

隐式提交的SQL语句

一下这些SQL语句会产生一个隐士的提交操作,即执行完这些语句后,会有一个隐式的COMMIT提交操作,也就是说这些语句无法回滚的。大概包括“DDL语句”、“管理语句”以及对用户和权限操作的相关语句。

三、事务操作的统计变量

因为InnoDB存储引擎是支持事务的,因此对于InnoDB存储引擎的应用,在考虑每秒请求数(Question Per SecondQPS)的同时,也许更应该关注每秒事务处理的能力(Transaction Per Second看,TPS)。

计算TPS的方法是(com_commit+com_rollback/ time。但是用这种方法计算的前提是:所有的事务必须都是显式提交的,如果存在隐式的提交和回滚,不会计算到com_commitcom_rollback变量中。如:

所以这个计算方式在实际应用中并不靠谱,更多的可能是统计insert、update、delete这些dml操作。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!