有表
CREATE TABLE `myarticle` (
`ID` int(11) NOT NULL auto_increment,
`ChannelID` int(11) default NULL,
`Title` varchar(250) default NULL,
`ViceTitle` varchar(250) default NULL,
`Content` mediumtext,
`Summary` mediumtext,
`KeyWord` varchar(250) default NULL,
`Source` varchar(50) default NULL,
`Author` varchar(50) default NULL,
`PublishDate` datetime default NULL,
`ReadTimes` int(11) default NULL,
`Score` int(11) default NULL,
`PicAccID` int(11) default NULL,
`UserId` int(11) default NULL,
`State` varchar(50) default '新稿',
`DoDate` datetime default NULL,
`ID2` int(11) NOT NULL default '1',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
现在想用触发器来实现 当在表中插入一条记录时 使 ID2 的值等于ID 的值,ID 的值是自动增加的。
create trigger `mysqlwebproject`.`mm` AFTER INSERT on `mysqlwebproject`.`myarticle`
for each row BEGIN
DECLARE aa int ;
set aa= NEW.ID;
update myarticle set myarticle.ID2=aa where myarticle.ID=aa;
END;这个是我自己写的 触发器,当插入数据时报错,错误信息如下
Error Number : 1442
Error Message: Can't update table 'myarticle' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我该怎么写啊,请指点
CREATE TABLE `myarticle` (
`ID` int(11) NOT NULL auto_increment,
`ChannelID` int(11) default NULL,
`Title` varchar(250) default NULL,
`ViceTitle` varchar(250) default NULL,
`Content` mediumtext,
`Summary` mediumtext,
`KeyWord` varchar(250) default NULL,
`Source` varchar(50) default NULL,
`Author` varchar(50) default NULL,
`PublishDate` datetime default NULL,
`ReadTimes` int(11) default NULL,
`Score` int(11) default NULL,
`PicAccID` int(11) default NULL,
`UserId` int(11) default NULL,
`State` varchar(50) default '新稿',
`DoDate` datetime default NULL,
`ID2` int(11) NOT NULL default '1',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
现在想用触发器来实现 当在表中插入一条记录时 使 ID2 的值等于ID 的值,ID 的值是自动增加的。
create trigger `mysqlwebproject`.`mm` AFTER INSERT on `mysqlwebproject`.`myarticle`
for each row BEGIN
DECLARE aa int ;
set aa= NEW.ID;
update myarticle set myarticle.ID2=aa where myarticle.ID=aa;
END;这个是我自己写的 触发器,当插入数据时报错,错误信息如下
Error Number : 1442
Error Message: Can't update table 'myarticle' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我该怎么写啊,请指点
解决方案 »
- 请问如何把这段MS SQL的代码转换成MySQL的代码,请高手后帮忙,谢谢!
- windows下pgAgent使用问题.
- MySQL启动不起来,大哥们帮看看怎么解决,谢谢了。
- 怎样得到这个结果
- sqlite3有两个排序条件,请教怎么写sql语句
- 请问Mysql 采用复制目录的方式备份还原,执行操作会出现Incorrect key file for table '表名'; try to repair it,为什么,如何解决
- 高分求解不能进入创建的数据库?????
- 主键生成的问题?
- 对mysql4.1.X支持中文问题的讨论,欢迎大家发言
- 我如何在LINUX系统中嵌入一个Windows2000系统
- 能否从mysql5 将数据库转移到mysql4?
- 存储过程OUT和INOUT类型怎么传参?
-> `ID` int(11) NOT NULL auto_increment,
-> `ChannelID` int(11) default NULL,
-> `ID2` int(11) NOT NULL default '1',
-> PRIMARY KEY (`ID`)
-> );
Query OK, 0 rows affected (0.09 sec)mysql> delimiter |
mysql>
mysql> CREATE TRIGGER testref BEFORE INSERT ON myarticle
-> FOR EACH ROW BEGIN
-> declare aa INT;
-> select max(id) into aa from myarticle;
-> set NEW.ID2=IFNULL(aa,0)+1;
-> END;
-> |
Query OK, 0 rows affected (0.14 sec)mysql> delimiter ;
mysql>
mysql> insert into myarticle(ChannelID) values (10),(20),(30);
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> select * from myarticle;
+----+-----------+-----+
| ID | ChannelID | ID2 |
+----+-----------+-----+
| 1 | 10 | 1 |
| 2 | 20 | 2 |
| 3 | 30 | 3 |
+----+-----------+-----+
3 rows in set (0.00 sec)mysql>