1 事务
1.1 事务原则
-
原子性(Atomicty)
要么都成功,要么都失败
-
一致性(Consistency)
事务前后的数据完整性要保证一致
-
持久性(Durability)
事务一旦提交则不可逆,被持久化到数据库中!
-
隔离性(Isoaltion)
事务的隔离性是多个用户并发访问数据库时,数据库位每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离。
1.2隔离所导致的一些问题:
-
脏读:
指一个事务读取了另外一个事务未提交的数据。
-
不可重复读:
在一个事务内读取表的某一行数据,多次读取结果不同。(不一定是错误,只是某些场合不对)
-
虚读(幻读):
是指一个事务内读取到别的事务插入的数据,导致前后读取不一致。
语法:
===============事务======================
– mysql是默认开启事务自动提交的
set autocommit = 0 /关闭/
set autocommit = 1 /开启(默认的)/
– 手动处理事务
set autocommit = 0
– 事务开启
start transaction – 标记一个事务的开始,从这个之后都在同一个事务内
insert xx
insert xx
– 提交: 持久化(成功!)
commit
– 回滚: 回到原来的样子(失败!)
rollback
– 事务结束
set autocommit = 1 – 开启自动提交
– 了解
savepoint 保存点名 – 设置一个事务的保存点
rollback to savepoint 保存点名 – 回滚到保存点
release savepoint 保存点名 – 撤销保存点
**示例:**
```mysql
-- 转账
create datebase 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',1000.00),('b',0.00)
-- 模拟转账:事务
set autocommit = 0;
start transaction
update account set money=money-100 where `name` = 'a'
update account set money=money+100 where `name` = 'b'
commit; -- 提交事务,就被持久化了!
rollback; -- 回滚
set autocommit = 1; -- 恢复默认值
85万+

被折叠的 条评论
为什么被折叠?



