MySQL如何用触发器实现新增时删除最后一条数据

我这边有一张表用作数据缓冲区,每次仅保留前1000条记录,遇到2个小麻烦:如何用BEFORE触发器实现每次新增之前删除最后一条记录?如何用AFTER触发器实现每次查询之后... 我这边有一张表用作数据缓冲区,每次仅保留前1000条记录,遇到2个小麻烦:
如何用BEFORE触发器实现每次新增之前删除最后一条记录?
如何用AFTER触发器实现每次查询之后删除所查询都记录?
假设有表A(主键ID int,字段CONF varchar)
实例1:
每当触发INSERT事件前:
INSERT INTO TABLE_A VALUES(NULL,'NEW STRING');
都进行一次:
DELETE FROM TABLE_A ORDER BY ID ASC LIMIT 1;
实例2:
每当触发SELECT事件后:
SELECT CONF FROM TABLE_A ORDER BY ID ASC LIMIT 1;
都进行一次:
DELETE FROM TABLE_A ORDER BY ID ASC LIMIT 1;
展开
 我来答
张伊笙
2018-09-12 · TA获得超过527个赞
知道小有建树答主
回答量:962
采纳率:85%
帮助的人:450万
展开全部
首先mysql 只支持3种触发器
1 DELETE 2 INSERT 3 UPDATE
其他的MySQL语句不支持触发器,所以你第二个需求不能用触发器实现。
其次是 非常遗憾,MYSQL中触发器中不能对本表进行 insert ,update ,delete 操作,以免递归循环触发。所以你第一个需求不能在insert前删除本表数据
对于update 能用set 进行操作替换,insert与delete只能借助第二张表才能实现需要的目的。
更多追问追答
追问
是否有其他解决方法?比如通过存储过程能否实现?
追答
用存储过程代价比较大,因为在存储过程中,不能判断几时插入数据,所以如果删除写在存储过程中,就不知道几时运行。如果你的表需要实时保持1000条数据,那样每时每刻运行存储过程压力也比较大。建议你缓存表建立两张一模一样的,就可以用触发器在插入数据的时候,删除另一张表的数据。然后在另一张表删除数据的时候再删除第一张表数据。这样就能保持同步
腾讯电脑管家
2018-09-20 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
展开全部
我做了一个测试,这样在删除记录时报错,而不能删除,你看可不可以
delimiter $
create procedure rb()
begin
rollback;
end $
create trigger trigger1 before delete on table
for each now
begin
if old.xxx=XXX then
call rb ;
end if ;
end $
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱笑的柯南推理
2018-09-12 · TA获得超过6192个赞
知道大有可为答主
回答量:6693
采纳率:65%
帮助的人:1175万
展开全部
使用delete 触发器格式:
CREATE trigger tri_update
on tablename
for delete
as
begin
--sql code
end

例:
CREATE trigger tri_update
on tablename1 --触发的表名
for delete
as
begin
declare @del_id varchar(40)
select @del_id = id from deleted --tablename1 中删除的数据保存在 deleted 中
delete tablename2 where id = @del_id --同步删除tablename2中数据
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
datouxiaoxu
2018-12-02 · TA获得超过1262个赞
知道小有建树答主
回答量:1022
采纳率:83%
帮助的人:480万
展开全部
MySQL的触发器不支持对本表操作的,你只能换种思路,在业务逻辑代码去处理这个事情,希望对你有帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式