事务

事务

作者:LAMP小白  点击:1897  发布日期:2012-10-28 18:16:00  返回列表
事务(transaction)是作为一个不可分割的逻辑单元而被执行的一组SQL语句,如有必要他的执行效果可以被撤销

事务机制的特性通常被概括为ACID原则
Atomic 原子性 构成一个事务的所有语句应该是一个独立的逻辑单元,要么全部成功要么全部失败
Consistent 稳定性 执行之前和执行之后都必须是稳定的,换句话说,事务不会将你的数据库弄的一团糟
Isolated 孤立性 事务不应该互相影响
Durable 可靠性 如果执行成功,那么影响将永久的记录到数据库里

提交

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SET name= 'haha';
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO t SET name= 'mio';
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)

回滚

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SET name='err';
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

另一种执行方式是利用SET语句直接改变自动提交模式的状态

mysql> SET autocommit = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SET name = 'hehe';
Query OK, 1 row affected (0.00 sec)

mysql> SET autocommit = 1;
Query OK, 0 rows affected (0.01 sec)

SET autocommit,START TRANSACTION BEGIN COMMOT ROLLBACK 都将明确的对事务产生影响

除此之外一面这些语句也会对事务产生影响

ALTER TABLE
CREATE INDEX
DROP DATABASE
DROP INDEX
DROP TABLE
LOCK TABLES
RENAME TABLE
SET autocommit = 1(if not already set to 1)
TRUNCATE TABLE
UNLOCK TABLE

使用事务保存点

MYSQL使你能够对一个事务进行部分回滚,这需要你在事务过程中使用SAVEPOINT语句设置一些称为保存点(savepoint)的标记

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SET name = 'a1';
Query OK, 1 row affected (0.00 sec)

mysql> SAVEPOINT a1;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SET name = 'a2';
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK TO SAVEPOINT a1;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SET name = 'a3';
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)


上一篇:涉及多个数据表的删除更新 下一篇:快递查询API
0