如果显式地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