当前位置:网站首页>TCL:事务的特点,语法,测试例——《mysql 从入门到内卷再到入土》
TCL:事务的特点,语法,测试例——《mysql 从入门到内卷再到入土》
2022-08-10 20:51:00 【Dhaa_Ryan】
内卷能让一个群体的内部变得异常的精致,但是本质上却完完全全没有任何的进步,并且会导致更多没必要的资源浪费以及带来更加激烈的竞争。它是zbzy社会下劳动力过剩的必然现象。
事务
TCL(事务控制)语言
一个或一组sql语句组成的执行单元,有点像函数
如果有一个事务有某一条语句失败,那么整个单元将会被回滚(所有的努力全部木大)
innodb引擎支持事务功能
ACID属性:
A:原子性
事务它不可分割,里面的操作要么都发生,要么都不发生
类似于函数
C:一致性
事务必须让数据库从一个一致性状态变换到另外一个一致性状态
事务执行完之后数据依旧准确可靠
I :隔离性
事务之间的执行不会相互影响,互不干扰
D:持久性
事务一旦被提交(执行),它的改变是永久性的,接下来的其他操作和数据库故障不应该对其有影响
创建事务
隐式事务:事务没有明显的开启和结束的标记
//看不出来是事务,insert,update,delete
显式事务:事务有明显的开启和结束的标记
前提:必须设置自动提交功能为禁用
set autocommit=0;
//输入后默认开启transaction,不然它依旧会把一个语句当成一个事务
结束事务:commit
回滚事务:rollback
测试例:
SET autocommit=0;
START TRANSACTION
//开启事务
INSERT INTO `user` (`id`, `mobile`, `nickname`, `gmt_created`) VALUES (1, '1919810', '三浦大先辈', now());
INSERT INTO `user` (`id`, `mobile`, `nickname`, `gmt_created`) VALUES (1, '114514', '野兽先辈', now());
ROLLBACK/COMMIT
回滚/提交事务
SAVEPOINT 节点;//设置保存点
测试例:
SET autocommit=0;
START TRANSCTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a
DELETE FROM account WHERE id=28;
ROLLBACK TO a;//回滚到设置的断点处,假如说回滚执行后,id=25的依旧被删除,但是id=28的被保留
在事务中DELETE和TRUNCATE的区别
SET autocommit=0;
START TRANSCTION;
DELETE FROM account
ROLLBACK;//在ROLLBACK后数据成功回滚,也许是在内存中删除
SET autocommit=0;
START TRANSCTION;
TRUNCATE TABLE account
ROLLBACK;//在ROLLBACK后数据被删除了,也许是在磁盘中删除
并发问题处理
同时运行的多个事务,当访问数据库中的相同数据时,需要采取必要的隔离机制
脏读:对于两个事务T1,T2,T1读取了被T2更新但是还没被提交的数据之后,若T2回滚,那么T1读取的内容是临时且无效的
不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段,之后T1再读取同一个字段,那么值就不同了
幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在表中插入了一些新的行之后,若T1再次读取同一个表,就会多出几行
数据库的事务隔离级别
Oracle:支持2种事务隔离级别,READ COMMITED ,SERIALIZABLE,默认级别为READ COMMITED
MYSQL:
支持4种,
READ UNCOMMITTED//读未提交数据
允许事务读取未被其他事务提交的变更,脏读,不可重复和幻读的问题都会出现
READ COMMITED//读已提交数据
只允许事务读取和其他被提交事务的变更,可避免脏读,不可重复和幻读的问题任然会出现
REPEATABLE READ(默认)
可重复读
确保事务可以多次从一个字段中读取相同的只,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但是幻读的问题依然存在
SERIALIZABLE//串行化,序列化
确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入,更新,删除操作,可避免所有并发问题,但是效率低
查看当前的隔离级别
SELECT @@tx_isolation
设置当前mySQL连接的隔离级别:
set transaction isolation level read committed;
设置数据库系统的全局的隔离级别:
set global transaction isolation level read committed;
返回索引
边栏推荐
- The evolution history of Go programmers
- (十二)STM32——NVIC中断优先级管理
- Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 用 kubeadm 创建集群
- paddle 35 paddledetection保存训练过程中的log信息
- "POJ 3666" Making the Grade problem solution (two methods)
- Kyligence 通过 SOC 2 Type II 审计,以可信赖的企业级产品服务全球客户
- Implementation of graceful exit in Golang
- 详叙c中的分支与循环
- 爬虫基本原理介绍、实现以及问题解决
- 【图像分类】2018-MobileNetV2
猜你喜欢
随机推荐
2021 CybricsCTF
重载和重写
ACM MM 2022 统一归一化:加速Transformer工业部署的归一化方法
社区分享|货拉拉通过JumpServer纳管大规模云上资产
A fullGC problem troubleshooting caused by groovy
机器学习笔记:t-SNE
OPPO Enco X2 迎来秋季产品升级 旗舰体验全面拉满
爬虫基本原理介绍、实现以及问题解决
Kubernetes Notes / Getting Started / Production Environment / Installing Kubernetes with Deployment Tools / Starting a Cluster with kubeadm / Creating a Cluster with kubeadm
"Distributed Microservice E-commerce" Topic (1) - Project Introduction
优化是一种习惯●出发点是'站在靠近临界'的地方
找的笔试题的复盘(一)
详叙c中的分支与循环
卡片盒笔记法的操作步骤
C. Even Picture
CGO Preliminary Cognition and Basic Data Type Conversion
"POJ 3666" Making the Grade problem solution (two methods)
参天生长大模型:昇腾AI如何强壮模型开发与创新之根?
XML小讲
变量和它的特性——《mysql 从入门到内卷再到入土》