0
我的問題是,我要插入新行的計算值依賴於選擇,在交易先前執行。但是避免,並行事務插入相同的計算值。鎖定表像PostgreSQL的
這個問題應該通過事務隔離級別SERIALIZABLE避免。但事實並非如此。
- TRANSACTION A:
我通過以下步驟來運行BEGIN;
- 交易B:BEGIN;
- 交易A:從tableName中選擇max(x);
- TRANSACTION B:從tableName中選擇max(x);
- TRANSACTION B:插入到表名(X,PK_COLUMN)值(最大+ 1,primaryKeyA);
- 事務A:插入到表名(X,PK_COLUMN)值(最大+ 1,primaryKeyB);
- 交易A:COMMIT;
- 交易B:COMMIT;
在此之後,在MySQL中,我有兩個具有相同x值的新行,但我希望兩個事務中的一箇中止。
在PostgreSQL上,我可以做一個LOCK TABLE tableName IN SHARE MODE
,這樣可以防止TRANSACTION A執行第6步。在MySQL上,我嘗試了http://dev.mysql.com/doc/refman/5.1/de/lock-tables.html下描述的LOCKING技術,但沒有成功。
有什麼建議嗎?謝謝。