先建一个表,表结构如下:
CREATE TABLE `seek`.`test` (
`id` int(10) unsigned NOT NULL auto_increment,
`nid` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;再为此表建立触发器,代码如下:CREATE TRIGGER testref BEFORE INSERT ON test
FOR EACH ROW BEGIN
UPDATE test SET nid = 0 WHERE id = NEW.nid;
END即插入数据后,更改id值与新插入数据nid相等的数据。
当插入数据:
mysql> insert into test(id,nid) values (12,3);出现以下错误
ERROR 1442 (HY000): Can't update table 'test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.请问如何解决??
CREATE TABLE `seek`.`test` (
`id` int(10) unsigned NOT NULL auto_increment,
`nid` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;再为此表建立触发器,代码如下:CREATE TRIGGER testref BEFORE INSERT ON test
FOR EACH ROW BEGIN
UPDATE test SET nid = 0 WHERE id = NEW.nid;
END即插入数据后,更改id值与新插入数据nid相等的数据。
当插入数据:
mysql> insert into test(id,nid) values (12,3);出现以下错误
ERROR 1442 (HY000): Can't update table 'test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.请问如何解决??
解决方案 »
- MySQL查询月底累计值
- mysql root 权限消失
- 还是导出的问题
- 为什么总是 mysqld 占用mem一下午总是 64% ,是否过高 ?(原因以及如何解决?)
- 分区表是否在建立的时候就已经确定了建几个分区?
- mysql server出现的怪问题
- 请给我一个确实能够打的开的mysql-shareware-3.22.32-win下载的链接
- 用网页表单接收用户的中文跟日文数据并存入MySQL数据库,但从库里读取数据后在网页上显示就会出现乱码。问要怎样才能正确显示,即中
- mysql集群与非集群执行存储过程有什么不同
- mysqld_multi centos6.9 无法自启动求助
- WWWWA进来,谢谢
- "熄灯一小时"求关于mysql字段内的值排序问题
为什么不一次性查对呢?
id nid
1 3
3 6
然后你插入(12,3)那么在这个记录插入之前会先把第二条记录修改为(3,0),然后才把(12,3)插入到表中。
看上去是通的,但是你要知道,表的锁定问题是存在的,你的触发器在工作的时候,是对本表锁定的,在此期间是不能修改该表的。除非等到触发器事务提交。你制作了一个类似死锁的短暂死锁,就是你要插入,系统说不行,我正锁定该表呢,然后,你就没插入,系统就结束了这个假死锁。