在触发器MySQL中拒绝Delete语句
我有一个数据库,客户希望在其中运行在触发器MySQL中拒绝Delete语句,mysql,Mysql,我有一个数据库,客户希望在其中运行DELETE语句。但在数据库方面,记录应该是隐藏的,而不是删除的 我是否可以在删除前使用触发器将可见性标志更改为false,而不是删除记录?我认为在MySQL中执行此操作的唯一方法是(正如Alex Monthy所暗示的,这真的是该逻辑的所在吗?)是使用删除后触发器重新插入可见性标志设置为false的记录: CREATE TRIGGER foo AFTER DELETE ON my_table FOR EACH ROW INSERT INTO my_table
DELETE
语句。但在数据库方面,记录应该是隐藏的,而不是删除的
我是否可以在删除前使用
触发器
将可见性
标志更改为false
,而不是删除记录?我认为在MySQL中执行此操作的唯一方法是(正如Alex Monthy所暗示的,这真的是该逻辑的所在吗?)是使用删除后触发器重新插入可见性
标志设置为false的记录:
CREATE TRIGGER foo AFTER DELETE ON my_table FOR EACH ROW
INSERT INTO my_table (visibility, colA, colB, colC)
VALUES ( false, OLD.colA, OLD.colB, OLD.colC);
您可以从before触发器中止删除操作(只需使触发器引发错误,例如调用不存在的过程),但这不能使您根据需要更新
可见性
标志。您的意思是想欺骗客户,让他们相信他们删除了一些记录,而事实上这些记录只被标志隐藏?是的。然后他们打电话告诉我,他们不小心删除了一些东西,这些东西可以很快恢复。再见,客户对此毫无疑问。客户使用的是一个允许直接操作mysql的界面,比如mysql命令行客户端或phpMyAdmin?或者它是一个自定义接口?您可以选择代替触发器。代替触发器的只有Microsoft SQL(MSSQL)。这就是问题所在。