赞
踩
TCL事务控制语言
事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
引入:
张三丰有1000元,郭襄也有1000元,三丰要给郭襄转500元,这要执行两条语句,三丰钱-500,郭襄钱+500
update 表 set 三丰的余额=500 where name=‘张三丰’
这两条语句中间出现了意外,这时三丰的钱少了500,而郭襄的钱没有多。这500不翼而飞了,这时三丰用事务来解决
update 表 set 郭襄的余额=1500 where name = ‘郭襄’
事务的特性ACID
比如一条insert、update、delete语句
前提:必须先设置自动提交功能为禁用
set autocommit= 0;
步骤1:开启事务
set autocommit = 0;#写了这条语句就默认开启了事务
start transaction; #这条语句可选
步骤2:编写事务中的sql语句(select、insert、update、delete)
语句1;
语句2;
...
步骤3:结束事务
commit; #提交事务
或
rollback; #回滚事务
或
savepoint 节点名; #设置保存点
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
事务的隔离级别
脏读 | 不可重复读 | 幻读 | |
---|---|---|---|
read uncommitted | 会 | 会 | 会 |
read committed | 不会 | 会 | 会 |
repeatable read | 不会 | 不会 | 会 |
serializable | 不会 | 不会 | 不会 |
savepoint的使用
SET autocommit = 0;
START TRANSACTION;
DELETE FROM account WHERE id = 25;
SAVEPOINT a; #设置保存点
DELETE FROM account WHERE id = 29;
ROLLBACK TO a; #返回到保存点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。