事务ACID

1. 什么是事务(Transaction)--->事务是访问并可能更新数据库中各项数据项的一个程序执行单元,也是数据库并发控制的基本单位。

事务内的语句,要么全部执行成功(提交事务),要么全部执行失败(发生回滚,撤销之前的所有操作)

2. 事务原则 --->原子性、一致性、持久性、隔离性

原子性(Atomicity): 要么都成功,要么都失败

一致性(Consistency): 事务前后的数据完整性要保证一致

隔离性(Isolation): 多个并发事务之间要相互隔离,不能被其他事务的操作数据所干扰

持久性(Durability): 事务一旦提交则不可逆

3. 隔离导致的问题

脏读-->指在一个事务处理过程里读取了另一个未提交的事务中的数据。

不可重复读-->指在数据库访问中,一个事务范围内多次查询却返回了不同的数据值。

幻读-->在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。

4. SQL的四个隔离级别

提交读(Read Committed): 事务中的修改只有提交以后才能被其它事务看到。

未提交读(Read Uncommitted): 一个事务能够读取到别的事务中没有提交的更新数据若事务修改了没有提交,其他事务也能看到。

可重复读(Repeated Read): 在同一事务中先后执行的多次查询将返回同一结果。

可串行化(Serializable): 不允许事务并发执行,强制事务串行执行。在读取的每一行数据上都加上了锁,读写相互都会阻塞,效率低,这种隔离级别最高,最安全。

隔离级别脏读不可重复读幻读
Read Committed×
Read Uncommitted
Repeated Read××
Serializable×××

√ 表示会发生,× 表示不会发生 

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-300 WHERE `name`='A' 
UPDATE `account` SET money=money+300 WHERE `name`='B' 

COMMIT; //提交事务,就被持久化了!
ROLLBACK; //回滚
 
SET autocommit = 1; //恢复默认值

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值