我想鎖定一個表格行,以便該行上的任何其他讀取操作將等待,直到鎖定被釋放,並且我想避免擁有整個桌子上的鎖。當它鎖定時等待讀取一行 - 事務隔離
我有如下表(InnoDB的)
CREATE TABLE account_balance (
account INTEGER UNIQUE,
balance INTEGER NOT NULL,
PRIMARY KEY (account)
);
我執行下面的交易,來獲取行
START TRANSACTION;
SELECT balance FROM account_balance WHERE account = 1 FOR UPDATE;
SELECT SLEEP(10);
COMMIT;
一個鎖,我想下面的查詢等待鎖被釋放
SELECT balance FROM account_balance WHERE account = 1;
要做到這一點,我發現的唯一方法是運行SELECT如下
SET autocommit = 0; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SELECT ....;
它將等待鎖被釋放,但我應該爲這個表自動提交和隔離級別設置前綴每SELECT
。
有沒有在表級別配置autocommit=0
和transaction-isolation = SERIALIZABLE
ONLY的方法嗎?
我知道我可以在my.cnf
設置
[mysqld]
transaction-isolation = SERIALIZABLE
autocommit = 0
,但我不想影響其他表和模式進行其他操作。
裁判:
- http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html
- http://dev.mysql.com/doc/refman/5.6/en/innodb-lock-modes.html
歡迎來到Stack Overflow,並感謝一個有趣的問題。您從哪種主機語言連接到MySQL? – 2015-02-24 13:40:45
嗨Ollie,謝謝你的回覆。該表中將有多個客戶端閱讀,並且可以用不同語言(PHP和JS)編寫。我正在尋找一個「服務器端」解決方案,因爲我想強制執行它,而不考慮用於製作SELECT的語言。 – 2015-02-25 05:20:54