我在MySQL中有这个TRIGGER:
CREATE DEFINER = CURRENT_USER TRIGGER `test`.`view_AFTER_INSERT` AFTER INSERT ON `views` FOR EACH ROW
BEGIN
UPDATE metrics SET met_nu_vie = met_nu_vie + 1 WHERE usp_id = NEW.usp_id;
END
基本上,当用户从Web应用程序中的另一个用户收到“视图”时,系统会在表“视图”中创建一个新行,并在插入后,在另一个表(度量标准)中增加一个计数器值。
我的问题是:如果用户从10个不同的用户收到10个并发视图......¿这个更新安全吗?
我架构上的所有表都是INNODB。
感谢。
答案 0 :(得分:0)
如果用户收到X个并发视图,那么计数器将使用问题中的更新语句增加X.
正如innodb locks上的mysql手册所解释的那样:
UPDATE ... WHERE ...在每条记录上设置独占下一键锁定 搜索遭遇。但是,只需要索引记录锁定 对于使用唯一索引锁定行以搜索a的语句 独特的一行。
关于独占锁的Mysql手册说:
如果事务T1在行
r
上持有独占(X)锁,则为请求 来自某个不同的事务T2,用于r
上任一类型[独占或共享]的锁定 不能立即授予。相反,事务T2必须等待 事务T1释放其对行r
的锁定。
总结一下:查看者可能在您的应用程序级别并发,但在mysql级别更新是使用独占锁序列化的。