sql-- 创建测试表CREATE TABLE example_table ( id SERIAL PRIMARY KEY, value INTEGER);-- 开始两个并发事务-- 事务1BEGIN;UPDATE example_table SET value = 100 WHERE id = 1;-- 事务2BEGIN;UPDATE example_table SET value = 200 WHERE id = 1;-- 事务1尝试提交COMMIT;-- 事务2尝试提交,将导致序列化失败COMMIT;
sql-- 创建测试表CREATE TABLE deadlock_example ( id SERIAL PRIMARY KEY, value INTEGER);-- 开始两个事务,它们以相反的顺序锁定行-- 事务1BEGIN;UPDATE deadlock_example SET value = 100 WHERE id = 1;-- 事务2BEGIN;UPDATE deadlock_example SET value = 200 WHERE id = 2;-- 事务1尝试锁定id = 2的行UPDATE deadlock_example SET value = 300 WHERE id = 2;-- 事务2尝试锁定id = 1的行,导致死锁UPDATE deadlock_example SET value = 400 WHERE id = 1;-- 事务1尝试提交,但由于死锁而失败COMMIT;-- 事务2尝试提交,但由于死锁而失败COMMIT;
sql-- 创建测试表CREATE TABLE concurrency_conflict_example ( id SERIAL PRIMARY KEY, value INTEGER);-- 开始两个事务-- 事务1BEGIN;SELECT * FROM concurrency_conflict_example WHERE id = 1;-- 事务2修改了id = 1的行UPDATE concurrency_conflict_example SET value = 500 WHERE id = 1;-- 事务1尝试提交,但由于并发控制冲突而失败COMMIT;