A(Atomicity)原子性:要么都成功要么都失败。
C(Consistency)一致性:事务前后的数据完整要保证一致。
I(Isolation)隔离性:事务一旦提交则不可逆,被持久化到数据库中。
D(Durability)持久性:多用户并发访问数据库时,每个用户的事务之间不相互干扰。
脏读:事务读取了另外一个事务未提交的数据。
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。
虚读(幻读):在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shop
CREATE TABLE `account`(
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account(`name`,money) VALUES ('A',2000.00),('B',10000.00)
-- 模拟转账:事务
SET autocommit =0; -- 关闭自动提交
START TRANSACTION; -- 开启一个事务
UPDATE account SET money=money-500 WHERE `name`='A'; -- A减500
UPDATE account SET money=money+500 WHERE `name`='B'; -- A加500
-- FLUSH PRIVILEGES; -- Navicat中执行上面两段更新后要先刷新权限才会更新表的内容
COMMIT; -- 提交事务
ROLLBACK; -- 回滚
SET autocommit=1; -- 恢复默认值