SQL TRANSACTION

事务 TRANSACTION

1
2
3
4
5
6
7
8
9
10
11
-- 类似于一个线程,创建以后会执行里面的SQL语句
-- 下面这句用于创建线程
START TRANSACTION;

INSERT INTO orders (customer_id, order_date, status)
VALUES (1, '2019-01-01', 1);

INSERT INTO order_items
VALUES (LAST_INSERT_ID(), 1, 1, 1);
-- COMMIT用于结束线程
COMMIT;

Lost Update

两个事务同时更新同一个表
只需要用锁就能解决

Dirty Reads

另外一个线程读取了被未被提交的数据导致数据出错
使用隔离级别(READ COMMITTED)进行解决,事务只能读取已经提交的数据

Non-repeating Reads

读取一个数据却获得两个不同的结果
使用隔离级别(REPEATABLE READ),即使数据发生了改变,也会使用第一次读取到的数据快照进行处理

Phantom Reads

读取事务完成后,数据才更新成功
隔离级别(SERIALIZABLE),查询事务会等待更新事务完成以后才进行

1
2
-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL 隔离界别;

死锁

和之前学C++多线程编程的一样,两个线程你等我释放,我等你释放,导致大家都没得继续下一步就是死锁


SQL TRANSACTION
http://www.kirisamkekano.com/2023/08/27/SQL9/
作者
Ame
发布于
2023年8月27日
许可协议