MySQL(事务控制语言TCL)


一、事务的概念

事务:
一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行

二、事务的特性

ACID

 原子性:一个事务不可再分割,要么都执行要么都不执行
 一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
 隔离性:一个事务的执行不受其他事务的干扰
 持久性:一个事务一旦提交,则会永久的改变数据库的数据事务的创建

三、隐式事务和显示事务

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

set autocommit=0#禁用事务

四、事务的步骤

步骤1:开启事务
set autocommit=0;
start transaction;#可选的
步骤2:编写事务中的SQL语句(select insert update delete这几个才可以编写事务,比如drop等就不行)
语句1;
语句2;
.....
步骤3:结束事务
commit;提交事务
rollback;回滚事务
savepoint 节点名;设置保存点
开启事务的语句;
updateset 张三丰的余额=500 where name=‘张三丰’
updateset 郭襄的余额=1500 where name=‘郭襄’
结束事务的语句;

五、三大范式

第一范式: 列不可再分
第二范式:属性完全依赖于主键
第三范式:属性不依赖于其他的非主属性,属性直接依赖于主键

六、事务步骤演示


创建一个演示的表叫account
DROP TABLE IF EXISTS account;

CREATE TABLE account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20),
	balance DOUBLE
);

INSERT INTO account(username,balance)
VALUES('张无忌',1000),('赵敏',1000);

SELECT * FROM `account`;
#演示事务的使用步骤
#步骤1
SET autocommit=0;
START TRANSACTION;#可选的
#步骤2
UPDATE `account` SET `balance`=1000 WHERE `username`='张无忌';
UPDATE `account` SET `balance`=1000 WHERE `username`='赵敏';
#步骤3
#commit;
ROLLBACK;

七、事务的隔离级别(面试常考)

* 事务并发问题是如何产生的?
	- 当多个事务同时操作同一个数据库的相同数据时
* 事务并发问题
	- 脏读:一个事务读取到了另外一个事务未提交的数据
	- 不可重复读:同一个事务中,多次读取到的数据不一致
	- 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
* 处理事务并发问题,设置事务隔离级别
	- READ UNCOMMITTED
	- READ COMMITTED:可以避免脏读
	- REPEATABLE READ:可以避免脏读、不可重复读和一部分幻读
	- SERIALIZABLE:可以避免脏读、不可重复读和幻读`
* 注意:隔离级别从小到大安全性越来越高,但是效率越来越低
* 设置隔离级别
	- set session|global  transaction isolation level 隔离级别名;
* 查看隔离级别
	- select @@tx_i 

八、演示savepoint的使用

SELECT * FROM account;

SET autocommit=0;
START TRANSACTION;
DELETE FROM `account` WHERE id=1;
SAVEPOINT a;
DELETE FROM `account` WHERE id=2;
ROLLBACK TO a;
  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lnwd___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值