mysql中lock带trigger的表所引起的隐式lock

如果显式地lock一个表,而且这个表有trigger,那么trigger中所牵涉的表也会被lock。

  • 显式lock表的同时会隐式lock那些表
  • 会尽量使用低级锁。即能加读锁不会加写锁。
  • 当trigger中的表牵涉到修改(insert, delete, update),将会加写锁。 

考虑如下语句

LOCK TABLES t1 WRITE, t2 READ

而t1有如下trigger

CREATE TRIGGER t1_a_ins AFTER INSERT ON t1 FOR EACH ROW
BEGIN
  UPDATE t4 SET count = count+1
      WHERE id = NEW.id AND EXISTS (SELECT a FROM t3);
  INSERT INTO t2 VALUES(1, 2);
END;

t1 写锁。
t2 显式虽然是读锁,但因为t1的trigger里有insert到t2,所以t2是写锁。
t3 读锁。
t4 写锁。因为t1的trigger里有update到t4。

参考资料:

MySQL Reference Manual: http://dev.mysql.com/doc/refman/5.1/en/lock-tables-and-triggers.html