diff --git a/MySQL/transaction-error/ddl.sql b/MySQL/transaction-error/ddl.sql new file mode 100644 index 0000000..49600a6 --- /dev/null +++ b/MySQL/transaction-error/ddl.sql @@ -0,0 +1,14 @@ +create schema errors; +-- 生成演示用的表 +create table errors.customer +( + id int auto_increment + primary key, + username varchar(50) not null +); +create table errors.customer_back +( + id int auto_increment + primary key, + username varchar(50) not null +); \ No newline at end of file diff --git a/MySQL/transaction-error/user_a.sql b/MySQL/transaction-error/user_a.sql new file mode 100644 index 0000000..8869ebb --- /dev/null +++ b/MySQL/transaction-error/user_a.sql @@ -0,0 +1,42 @@ +-- example 1 + +-- ========== 0 ========= +start transaction; +-- A先查询 +select * +from customer; +-- ========== 1 ========= + +-- ========== 2 ========= +-- 在 B 添加数据后,A 尝试进行修改。奇怪的是,明明查询不到,居然可以修改成功 +update customer +set username = 'wuhu' +where id = 1; +-- A 再次查询表中数据,发现修改的那一行现身了 +select * +from customer; +commit; +-- ========== 3 ========= + + +-- example 2 +-- ========== 0 ========= +start transaction; +-- A先查询,查到数据如下: +-- 1,Fortern +-- 2,Maxin +-- 3,MooGeo +select * +from customer; +-- ========== 1 ========= + +-- ========== 2 ========= +-- A 备份表中数据到另一个表 +insert into customer_back select * from customer; +commit; +-- 结果备份表中的数据居然是被其他事物修改的数据!! +select * from customer_back; +-- 为什么会这样? +-- ========== 3 ========= + +select * from customer where id = 1; \ No newline at end of file diff --git a/MySQL/transaction-error/user_b.sql b/MySQL/transaction-error/user_b.sql new file mode 100644 index 0000000..41164d4 --- /dev/null +++ b/MySQL/transaction-error/user_b.sql @@ -0,0 +1,20 @@ +-- example 1 + +-- ========== 1 ========= +start transaction; +-- B插入数据 +insert into customer (id, username) +values (1, 'Fortern'), + (2, 'Maxin'), + (3, 'MooGeo'); +commit; +-- ========== 2 ========= + + +-- example 2 +-- ========== 1 ========= +start transaction; +-- B 修改所有人的name +update customer set username = '哈基米' where true; +commit; +-- ========== 2 ========= \ No newline at end of file