我想在MySQL中建立一个触发器,它会做两件事情:如果论坛的主题是位于垃圾或者被隐藏,删除,移到别的地方的话题回收站。问题是如何在'delete delete'触发器中停止删除操作?MySQL的触发器:移至回收站
1
A
回答
2
我不知道是否有防止删除,一旦它已经被调用而不引发某种异常的方式。
我想一个更好的解决办法可能是,而不是调用删除要垃圾桶/删除您应该更新的字段,如“IsTrashed”为TRUE记录。然后在更新触发器中查看它是否为TRUE并再次设置为TRUE(例如IF(OLD.IsTrashed && NEW.IsTrashed)
)。如果是,请删除它,否则将其移至垃圾箱。
这种方法产生的唯一问题是,如果更新已删除项目的不同字段(例如PostDate),则NEW.IsTrashed和OLD.IsTrashed都将为TRUE,因此它可能看起来像您试图删除它,但你只是更新PostDate。您可以检查,这是被修改(例如,通过检查OLD.SomeField <> NEW.SomeField
为每个其他字段)的唯一字段或使用一个字段,将始终复位它的值设置为NULL的UPDATE语句之后。像“TrashNow”。这样,如果TrashNow具有真值,那么您知道您确实想要垃圾场。
然而,“正在重置场”只是浪费空间,我认为这个问题的最佳解决方案是一个stored procedure ...类似:
CREATE PROCEDURE DeletePost (IN APostID INT)
BEGIN
IF ((SELECT InTrash FROM posts WHERE PostID = APostID LIMIT 1))
DELETE FROM posts WHERE PostID = APostID;
ELSE IF
UPDATE posts SET InTrash = TRUE WHERE PostID = APostID;
END IF;
END;
假设你有表职位与字段帖子ID(INT)和InTrash(任意整数型)。
你会调用这个像这样删除后与123帖子ID:
CALL DeletePost(123);
相关问题
- 1. 当GCM监听器触发时,只加载回收站视图
- 2. MYSQL - 触发器
- 3. 将Quickbooks Online Company移至开发站点
- 4. mysql触发器到oracle触发器
- 5. ActiveRecord回调或MySql触发器?
- 6. Mysql触发器返回坏股价值
- 7. mySQL触发器返回错误
- 8. 带触发条件的MySQL触发器
- 9. MySQL + delete触发器
- 10. MySQL的触发器的phpmyadmin
- 11. MySQL触发器没有被触发?
- 12. MySQL触发器没有触发AFTER INSERT
- 13. MySql触发器没有触发(完全)
- 14. MySQL中的触发器
- 15. MySQL的触发器 - 插入
- 16. MySQL的Foreach(触发器)
- 17. MySQL中的触发器
- 18. 将文件移动到回收站(PHP)
- 19. Sharepoint 2010事件接收器不会触发子网站
- 20. 滑动即可转至回收站中的下一个项目
- 21. 请勿从Firebase回收站适配器移除项目?
- 22. MySQL的触发器是否并发?
- 23. 如何使用Rails中的迁移创建mysql触发器?
- 24. MySQL事务和触发器
- 25. 错误在MySQL触发器
- 26. 与MySQL INSERT触发器
- 27. 设置MySQL触发器
- 28. mysql更新触发器
- 29. MySQL触发器更改
- 30. MySQL触发器IF语句
谢谢你,这不正是我想要的,但它确实我需要什么:) – Thinker 2009-08-04 08:52:09