什么是事务
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
事务原则:ACID 原则,原子性、一致性,隔离性,持久性 (脏读,不可重复读,幻读…)
原子性(Atomicity)
要么都成功,要么都失败
一致性(Consistency)
事务前后的数据完整性要保证一致
持久性(Durability)
事务一旦提交则不可逆,被持久化到数据库中
隔离性(lsolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
脏读:
指一个事务读取了另外一个事务未提交的数据。
不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)
虚读(幻读): 是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
SET autocommit = 0
SET autocommit = 1
START TRANSACTION
COMMIT
ROLLBACK
SET autocommit = 1
SAVEPOINT 保存点名
ROLLBACK TO SAVEPOINT 保存点名
RELEASE SAVEPOINT 保存点名
案例
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'
UPDATE account SET money=money+500 WHERE `name`= 'B'
COMMIT;
ROLLBACK;
SET autocommit = 1;
|