Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在触发器MySQL中拒绝Delete语句_Mysql - Fatal编程技术网

在触发器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)。这就是问题所在。