使用MySQL触发器禁止数据表数据的删除

在mysql命令行下执行:

DELIMITER $$ --将结束符定义成$$

CREATE TRIGGER `trigger_not_allow_del` --创建一个名字叫trigger_not_allow_del的触发器

BEFORE DELETE ON `merchant_objects` FOR EACH ROW --在删除merchant_objects表数据之前触发

BEGIN

    DECLARE msg varchar(255); --定义一个msg变量

    SET msg="不允许删除账单标准表信息"; --报错提示信息

    SIGNAL SQLSTATE "HY000" SET MESSAGE_TEXT = msg; --在删除数据时引发 SQLSTATE HY000 的错误以及报错信息

END $$

DELIMITER ;--将结束符定义成;

当这张表的数据被删除时:

mysql> delete from merchant_objects where object_id = 57804 limit 1;

ERROR 1644 (HY000): 不允许删除账单标准表信息

mysql>

注意:Mysql 5.5 开始为我们提供了SIGNAL函数来实现这个功能,请确认你的mysql版本是否>=5.5

删除触发器:

drop trigger trigger_not_allow_del;

查询哪些库有哪些表有哪些触发器

select TRIGGER_SCHEMA,TRIGGER_NAME, EVENT_OBJECT_TABLE from information_schema.triggers;

如果你mysql版本是5.5以下的,试下下面这个:

DROP PROCEDURE if exists fbd_delete;#删除存储过程

--创建禁止删除的存储过程;回滚

DELIMITER $$

create procedure fbd_delete()

    begin

    rollback;

end $$

drop trigger if exists `trigger_not_allow_del`;#删除触发器

--在删除操作之前,调用存储过程;引起回滚

CREATE TRIGGER `trigger_not_allow_del`

BEFORE DELETE ON `merchant_objects` FOR EACH ROW

BEGIN

    call fbd_delete ;

END $$

DELIMITER ;

还有一种办法,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 错误:1000 SQLSTATE: HY000 (ER_HASHCHK)消息:hashchk 错误:1001 SQ...
    灼灼2015阅读 23,689评论 0 6
  • ·错误:1000 SQLSTATE: HY000 (ER_HASHCHK)消息:hashchk·错误:1001 S...
    Catke阅读 1,646评论 0 2
  • 触发器 MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用...
    FTOLsXD阅读 964评论 0 1
  • MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,...
    金星show阅读 843评论 0 3
  • 供思考和复习的一些小程序 朋友告诉我程序要自己敲,切不可复制粘贴 程序1 一个整数,它加上100后是一个完全平方数...
    极客汪阅读 588评论 2 5