我希望锁定一个表行,以便该行上的任何其他读取操作都将等待锁的释放,并且我希望避免对整个表设置一个锁。
我有下表(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 (只配置)?
我知道我可以
[mysqld]
transaction-isolation = SERIALIZABLE
autocommit = 0在my.cnf中,但是我不想影响对其他表和模式所做的其他操作。
参考文献:
发布于 2015-02-24 13:49:43
自动提交和事务隔离设置不是与任何表关联,而是与到MySQL的每个连接相关联。
大多数语言绑定都有一个直接可调用的函数来启用或禁用自动提交。例如,http://php.net/manual/en/mysqli.autocommit.php
您可以按照您所做的方式设置事务隔离级别。一旦您为一个连接设置了它,它将保持设置。例如,请看这个。mySQL - Set isolation level using PHP's mysqli
通常,在建立连接的代码之后立即放置这种模式设置代码是很好的做法,因此模式对于应用程序的其余部分是可预测的。
https://stackoverflow.com/questions/28697295
复制相似问题