MySql事务控制语言

TCL:事务控制语言
事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
事务的特性:
原子性:一个事务不可再分割,要么都执行,要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:一个事务的执行不受其他事务的干扰
持久性:一个事务一旦提交,则会永久的改变数据库的数据

一、事务的创建

隐式事务:事务没有明显的开启和结束标记 ,比如 insert、update、delete语句
显示事务:事务具有明显的开启和结束标记,前提必须先设置自动提交功能为禁用

set autocommit = 0;

1. 事务的创建步骤

//一、开启事务
set autocommit = 0;
start transaction;	可选的
//二、编写事务中的sql语句(select insert update delete)
语句1;
语句2;
....
//三、结束事务
commit;提交事务
rollback;回滚事务

2. 演示事务的使用步骤

//开启事务
set autocommit=0;
start transaction;
//编写一组事务的语句
update account set balance = 500 where username = "张无忌";
update account set balance = 1500 where username = "赵敏";
//结束事务
commit;

3. 事务的隔离等级

read uncommitted : 出现脏读、幻读、不可重复读
read committed : 避免出现脏读,出现幻读和不可重复读
repeatable read : 避免出现脏读和不可重读读,出现幻读
serializable : 避免出现脏读,不可重复读和幻读

mysql中默认 第三个隔离级别 repeatable read ,而oracle中默认第二个

查看隔离级别:
select @@tx_isolation;
设置隔离级别
set session | global transaction isolation level 隔离级别;

4. 演示savepoint 的使用

set autocommit = 0;
start transaction;
delete from account where id = 25;
savepoint a;	设置保存点
delete from account where id = 28;
rollback to a;	回滚到保存点

二、并发事务

1. 事务的并发问题是如何发生的?

多个事务 同时 操作 同一个数据库的相同数据时

2. 并发问题有哪些?

脏读:一个事务读取了其他事务还没提交的数据,读到的是其他事务 “更新” 的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务 “插入” 的数据

3. 如何解决并发问题?

通过设置隔离级别来解决并发问题

4. 隔离级别

read uncommitted: 读未提交
read committed : 读已提交
repeatable read : 可重复读
serializable : 串行化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值