好吧,我刚刚从以前的开发人员那里继承了一个项目,在我进入他们之前,有一个特定的表丢失了记录,每次都保留完全相同数量的记录的问题,记录被完全擦除了。而且我注意到代码中也有很多DELETE
语句,但是我找不到删除记录的脚本。
现在,我每天运行两次CRON作业来备份数据库。
我已经使用此SQL
USE information_schema;
SELECT
table_name
FROM
referential_constraints
WHERE
constraint_schema = 'my_database_name'
AND referenced_table_name IN
(SELECT table_name
FROM information_schema.tables
WHERE table_schema ='my_database_name')
AND delete_rule = 'CASCADE'
它列出了我数据库中的所有表,并检查了CASCADE DELETE的任何可能性,但是到目前为止,它返回的是空的。
我经常使用SQL
是因为我是后端开发人员,但我不是专家。因此,我真的可以使用一些帮助,因为每次发生时,它都会变得很尴尬。这是一个MySQL
数据库。谢谢。
答案 0 :(得分:1)
我曾经遇到过类似的情况。我创建了一个SQL
TRIGGER语句,该语句在删除行之前将行存储到另一个表中,这样:
以下是在删除记录之前备份记录的示例:
CREATE TABLE `history_table` LIKE `table`;
ALTER TABLE `history_table`
MODIFY COLUMN `id` INT UNSIGNED NOT NULL;
ALTER TABLE `history_table` DROP PRIMARY KEY;
DELIMITER $$
CREATE TRIGGER `deleted_table` BEFORE DELETE on `table`
FOR EACH ROW
BEGIN
INSERT INTO history_table
SELECT *
FROM table
WHERE id = OLD.id;
END$$
DELIMITER ;
用于还原表
INSERT INTO table
SELECT * FROM history_table