作者:LAMP小白 点击:2047 发布日期: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