MySQL数据库学习笔记(九)—— SQL(事务)
其他
2020-02-10 18:34:46
阅读次数: 0
事务的基本介绍
- 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
- 操作
- 开启事务:start transaction
- 回滚:rollb
- 提交:commit
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
money DOUBLE
);
INSERT INTO account (NAME,money) VALUES("zhangsan",1000),("lisi",100);
SELECT * FROM account;
START TRANSACTION;
UPDATE account SET money=money-500 WHERE NAME="zhangsan";
UPDATE account SET money=money+500 WHERE NAME="lisi";
COMMIT;
ROLLBACK;
- 在MySQL数据库中事务默认提交
- MySQL数据库中事务默认自动提交,一条(DML)增删改语句会自动提交一次事务
- 一旦开启事务,那么事务只能手动提交才能保存数据
- 修改事务的默认提交方式
- 查看事务的默认提交方式:
SELECT @@autocommit;
, 1
代表自动提交 0
代表手动提交
- 修改事务的默认提交方式:
SET @@autocommit=0;
- Oracle数据库中事务默认手动提交
事务的四大特征
- 原子性:是不可分隔的最小操作单位,要么同时成功,要么同时失败
- 持久性:当事务提交或者回滚后,数据库会持久性的保存数据
- 隔离性:多个事务之间。相互独立。
- 一致性:事务操作前后数据总量不变
事务的隔离级别
- 概念:多个事务之间隔离的,相互独立的。但是多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
- 存在的问题:
- 脏读:一个事务读取到另一个事务中没有提交的数据
- 不可重复读:同一个事务中两次读取到的数据不一样,也称虚读
- 幻读:一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
- 隔离级别
- read uncommitted:读未提交,会产生 脏读、不可重复读、幻读问题
- read committed:读已提交,会产生 不可重复读、幻读问题(Oracle默认)
- repeatable read:可重复读,会产生 幻读问题(MySQL默认)
- serializable:串行化,可以解决所有问题
- 上述4种隔离级别,从小到大安全性越来越高,效率越来越低
- 数据库查询隔离级别:
select @@tx_isolation
- 数据库设置隔离级别:
set global isolation level 级别字符串
发布了113 篇原创文章 ·
获赞 1 ·
访问量 935
转载自blog.csdn.net/weixin_44876003/article/details/103421858