简单触发器的编写

feilo 2007-07-30 11:58:29
mysql初学者,有一个表dd,想把dd表的记录数控制在10条之内,大于10的话,把前面的记录删除,我意思是做一个这样的触发器:
CREATE TRIGGER dd1
AFTER INSERT ON dd
FOR EACH ROW
if (select count(*) from dd > 10) then (delete from dd limit 2)//实现这个功能的语句不懂写,请大家帮帮忙!谢谢!
...全文
253 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChumpKlutz 2007-08-04
  • 打赏
  • 举报
回复
不过可以把delete from dd limit 1;
这一句放在存贮过程中来调用
ChumpKlutz 2007-08-04
  • 打赏
  • 举报
回复
mysql目前的版本不支持在触发器中使用对表的操作
feilo 2007-08-04
  • 打赏
  • 举报
回复
怎么调?
我把delete from dd limit 1;改为call delRecord()也是出现同样的错误提醒啊。
delRecord()存贮过程的内容就是delete from dd limit 1;
feilo 2007-08-04
  • 打赏
  • 举报
回复
flatcd(Bob),那请问如何解决这个问题呢?
flatcd 2007-08-03
  • 打赏
  • 举报
回复
mysql的触发器内不支持对作触发的表进行操作
feilo 2007-07-31
  • 打赏
  • 举报
回复
哦,上面是语法问题,已经解决,这样写就行了:
CREATE TRIGGER dd1
AFTER INSERT ON dd
FOR EACH ROW
BEGIN
DECLARE cc int;
select count(*) into cc from dd;
if cc>10 then
delete from dd limit 1;
end if;
END;
但有以下问题,当dd表不足10条记录时,没有出现问题,当然触发器也不产生作用,但当dd表到达10条记录时,再向dd表插入记录的时候,却出现如下问题:
Can't update table 'dd' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
它不让我对dd表插入记录了,这是为什么呢?
whalefish2001 2007-07-31
  • 打赏
  • 举报
回复
核心内容如下:
declare cc int;
select count(*) into cc from dd where 1;
if cc>10 then
delete from dd limit 2;
end if

触发器的声明和结束楼主自己加上把。不会的话,查查手册。
feilo 2007-07-31
  • 打赏
  • 举报
回复
我这样写:
create trigger dd1
after insert on dd
for each row
declare cc int;
select count(*) into cc from dd where 1;
if cc>10 then
delete from dd limit 2;
end if
但出现如下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL

server version for the right syntax to use near 'declare cc int;
select count(*) into cc from dd where 1;
if cc>10 then
dele' at line 4

能不能给个能跑的例子啊?
feilo 2007-07-31
  • 打赏
  • 举报
回复
自已顶一下

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧