什么是事务?
事务是由完成任务的一个或多个操作组成, 这些操作作为一个整体不能分割, 要么全部执行成功, 要么全部失败.
事务四个特性
事务是必须满足 4 个条件 (ACID) 原子性(Atomicity, 或称不可分割性), 一致性(Consistency), 隔离性(Isolation, 又称独立性), 持久性(Durability).
- 原子性: 一个事务 (transaction) 中的所有操作, 要么全部完成, 要么全部不完成, 不会结束在中间某个环节.
事务在执行过程中发生错误, 会被回滚 (Rollback) 到事务开始前的状态, 就像这个事务从来没有执行过一样.
- 一致性: 在事务开始之前和事务结束以后, 数据库的完整性没有被破坏. 这表示写入的资料必须完全符合所有的预设规则,
这包含资料的精确度, 串联性以及后续数据库可以自发性地完成预定的工作.
- 隔离性: 数据库允许多个并发事务同时对其数据进行读写和修改的能力, 隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致.
事务隔离分为不同级别, 包括读未提交 (Read uncommitted), 读提交(read committed), 可重复读(repeatable read) 和串行化(Serializable).
- 持久性: 事务处理结束后, 对数据的修改就是永久的, 即便系统故障也不会丢失.
MySQL 中使用事务
MySQL 中使用事务控制语句完成事务操作
默认情况下单独 insert,update,delete 语句就是一个完成的事务操作.
常用事务控制语句:
- BEGIN 或 START TRANSACTION 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
上代码演示
- # 创建表 account
- create table account(id int,name varchar(20),money double(10,2));
- # 事务操作
- begin;
- insert into account(id,name,money) values(1,'李晨',20000);
- insert into account(id,name,money) values(1,'李晨',20000);
- # 提交事务
- commit;
- # 查询数据
- select * from account;
- begin;
- insert into account(id,name,money) values(1,'大郎',50000);
- insert into account(id,name,money) values(1,'金莲',50000);
- # 提交事务
- rollback;
- # 再次查询数据
- select * from account;
来源: http://www.bubuko.com/infodetail-3350070.html