作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] SELECT FOR UPDATE
时间Tue Oct 16 21:06:51 2012
※ 引述《a613204 (胖胖)》之铭言:
: 想请问一下在MySQL中这个语法
: 我查了一下 , 发现它可以把某些资料先Lock起来 , 让它没办法读
: 例如SELECT * FROM tb_name where id=xxx;
: 这样id:xx的资料就会被lock起来
: 请问有人用这个方法做资料列的锁定吗?
MySQL 的确有 select ... for update 可进行 row lock,然而,实际应用
时有些注意事项:
1. 只应用於 InnoDB 的资料表
create table your talbe (...) engine=InnoDB;
2. 某个连线以 select ... for update; 锁定资料列之後,其他连线也必
须加上 select ... lock in share mode; (或 for update),才有被
挡下来的锁定效果,不然,就请按下列第三点的作法。
3. 隔离等级设为 serializable,MySQL 会帮每一个 select 都加上 lock
in share mode,像这样子设:
set autocommit = off;
set transaction isolation level serializable;
start transaction;
select ... ;
commit;
除了每个连线各自设定,DBA也可用 set global transaction ... 进行全
面设定,或者,修改 my.ini (my.cnf) 组态档:
[mysqld]
transaction-isolation=选项
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.128.106
1F:推 a613204:感谢~ 10/16 21:32