[关闭]
@yanglt7 2018-06-06T06:42:18.000000Z 字数 2004 阅读 756

8 MySQL 事务

MySQL


MySQL事务主要用于处理操作量大,复杂程度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性):

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

事务控制语句

MySQL 事务处理主要有两种方法:

  1. 用 BEGIN, ROLLBACK, COMMIT来实现
    • BEGIN 开始一个事务
    • ROLLBACK 事务回滚
    • COMMIT 事务确认
  2. 直接用 SET 来改变 MySQL 的自动提交模式:
    • SET AUTOCOMMIT=0 禁止自动提交
    • SET AUTOCOMMIT=1 开启自动提交

事务测试

  1. mysql> use test;
  2. Database changed
  3. mysql> create table runoob_transaction_test(id int(5)) engine=innodb;
  4. Query OK, 0 rows affected (0.05 sec)
  5. mysql> select * from runoob_transaction_test ;
  6. Empty set (0.01 sec)
  7. mysql> begin; #开始事务
  8. Query OK, 0 rows affected (0.00 sec)
  9. mysql> insert into runoob_transaction_test value(5);
  10. Query OK, 1 row affected (0.01 sec)
  11. mysql> insert into runoob_transaction_test value(6);
  12. Query OK, 1 row affected (0.00 sec)
  13. mysql> commit; #提交事务
  14. Query OK, 0 rows affected (0.20 sec)
  15. mysql> select * from runoob_transaction_test;
  16. +------+
  17. | id |
  18. +------+
  19. | 5 |
  20. | 6 |
  21. +------+
  22. 2 rows in set (0.00 sec)
  23. mysql> begin; #开始事务
  24. Query OK, 0 rows affected (0.00 sec)
  25. mysql> insert into runoob_transaction_test values(7);
  26. Query OK, 1 row affected (0.18 sec)
  27. mysql> rollback; #回滚
  28. Query OK, 0 rows affected (0.01 sec)
  29. mysql> select * from runoob_transaction_test; #因为回滚所以数据没有插入
  30. +------+
  31. | id |
  32. +------+
  33. | 5 |
  34. | 6 |
  35. +------+
  36. 2 rows in set (0.00 sec)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注