mysql資料庫關於事物的問題?求解答
阿新 • • 發佈:2019-01-10
表格程式碼:
CREATE TABLE `t_teacher` ( `id` int(20) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `deposit` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8;
一個表格如下:
操作程式碼如下:
程式碼1:
START TRANSACTION; SELECT * FROM t_teacher; UPDATE t_teacher SET deposit = deposit+100 WHERE name ='老李'; INSERT INTO t_teacher(id,name,deposit) VALUES (8,'老張',7000); ROLLBACK; COMMIT;
程式碼2:
START TRANSACTION; SELECT * FROM t_teacher; UPDATE t_teacher SET deposit = deposit+100 WHERE name ='老李'; INSERT INTO t_teacher(name,deposit) VALUES ('老張',7000); ROLLBACK; COMMIT;
2個程式碼不同點在於第4行;單獨執行時程式碼1不能成功執行,程式碼2能成功執行。
若是將程式碼1和程式碼2分別先執行1遍,由於 ROLLBACK 的影響,資料庫不會發生改變。
若是在程式碼1執行1遍後,在只執行 COMMIT; 後,會造成資料庫的值改變,其結果相當於執行了行3;
但是在程式碼2執行1便後,在執行 COMMIT; 後,資料庫的值不發生改變。
請問這是什麼原因?