今天就跟大家聊聊有关MySQL中有哪些事务控制语句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
事务SQL
控制语句
MySQL事务遵从ACID:
•
Atomic(原子性):所有语句作为一个单元全部成功执行或全部取消。
•
Consistent(一致性):如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
•
Isolated(隔离性):事务之间不相互影响。
•
Durable(持久性):事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失
1)
事务SQL
控制语句
•
START TRANSACTION(或BEGIN):显式开始一个新事务
•
SAVEPOINT:分配事务过程中的一个位置,以供将来引用
•
COMMIT:永久记录当前事务所做的更改
•
ROLLBACK:取消当前事务所做的更改
•
ROLLBACK TO SAVEPOINT:取消在savepoint
之后执行的更改
•
RELEASE SAVEPOINT:删除savepoint
标识符
•
SET AUTOCOMMIT:为当前连接禁用或启用默认autocommit
模式
2)
AUTOCOMMIT
模式
如何设置
AUTOCOMMIT
模式决定了如何以及何时开始新事务。默认情况下,AUTOCOMMIT
处于全局启用状态,这意味着会强制每个
SQL
语句隐式开始一个新事务。可以通过一个选项文件全局禁用
AUTOCOMMIT,也可以通过设置
autocommit
变量为每个会话禁用它。启用
AUTOCOMMIT
会限制每个语句,并进而影响其自身事务中的事务表。这样可以有效地防止在一个事务中执行多个语句。这意味着,您将无法通过
COMMIT
或
ROLLBACK
作为一个单元提交或回滚多个语句。有时,会将这种情况误认为根本没有事务。但是,情况并非如此。启用
AUTOCOMMIT
后,每个语句仍会以原子方式执行。例如,通过在插入多个行时比较违反约束限制的效果,便可看出启用
AUTOCOMMIT
和根本不具有事务之间的差别。在非事务表(如
MyISAM)中,一旦发生错误,语句就会终止,已经插入的行会保留在该表中。而对于
InnoDB
表,已经插入的所有行都会从该表中删除,从而不会产生任何实际影响。
AUTOCOMMIT确定开始新事务的方式和时间;默认情况下,
AUTOCOMMIT
模式处于启用状态:作为一个事务隐式提交每个语句;
在my.cnf中将
AUTOCOMMIT
模式设置为
0,或者SET GLOBAL AUTOCOMMIT=0;SET SESSION AUTOCOMMIT=0; SET @@AUTOCOMMIT :=0;
则禁用
AUTOCOMMIT,事务会跨越多个语句,需要使用
COMMIT
或
ROLLBACK
结束事务;
使用
SELECT
检查
AUTOCOMMIT
设置:
SELECT @@AUTOCOMMIT;
3)
隐式提交
COMMIT
语句始终会显式提交当前事务。其他事务控制语句(例如,本幻灯片列出的语句)还具有隐式提交当前事务的作用。除了这些事务控制语句之外,其他类型的语句可能也具有隐式提交并进而终止)当前事务的作用。这些语句的行为就像在执行实际语句之前发出
COMMIT
一样。此外,这些语句本身并非事务语句,也就是说,如果成功,则无法回滚。通常,数据定义语句、据访问和用户管理语句以及锁定语句具有这种效果。
注:有很多例外情况,而且这些语句并非都能在所有版本的服务器上导致隐式提交。但是,建议将所有非
DML
语句都视为可导致隐式提交。有关导致隐式提交的完整语句列表,请参阅《MySQL
参考手册》:http://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html
隐式提交会终止当前事务。用于隐式提交的
SQL
语句:
l
START TRANSACTION
l
SET AUTOCOMMIT = 1
导致提交的非事务语句:
l
数据定义语句(ALTER、
CREATE
和
DROP)
l
管理语句(GRANT、
REVOKE
和
SET PASSWORD)
l
锁定语句(LOCK TABLES
和
UNLOCK TABLES)
导致隐式提交的语句示例:
Mysql>TRUNCATE TABLE
Mysql>LOAD DATA INFILE
4)
事务存储引擎
使用
SHOW ENGINES
列出引擎特征:
mysql> SHOW ENGINESG
********************* 2. row *********************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking,
and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
********************* 1. row *********************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
看完上述内容,你们对MySQL中有哪些事务控制语句有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注云行业资讯频道,感谢大家的支持。
评论前必须登录!
注册