Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 插入表中的某些行时,自动保存这些行的选项有哪些?_Mysql_Sql - Fatal编程技术网

Mysql 插入表中的某些行时,自动保存这些行的选项有哪些?

Mysql 插入表中的某些行时,自动保存这些行的选项有哪些?,mysql,sql,Mysql,Sql,我有一个名为Analysis\u Data的表,它存储软件代理基于代码分析生成的度量数据。代理自动将度量插入分析\u数据表中,并从以前的分析中删除一些度量。但是,我想保留分析\u数据表中的所有数据 mysql中是否有任何机制可以自动将新插入的行从分析_数据表复制到另一个表保存的_数据,这样即使代理在以后的分析周期中删除行,我也可以使用数据 我使用的是mysql版本14.14发行版5.7.13。您可以使用触发器: 代码和插入后触发器,如中的示例所示 大概是这样的: DELIMITER // CR

我有一个名为Analysis\u Data的表,它存储软件代理基于代码分析生成的度量数据。代理自动将度量插入分析\u数据表中,并从以前的分析中删除一些度量。但是,我想保留分析\u数据表中的所有数据

mysql中是否有任何机制可以自动将新插入的行从分析_数据表复制到另一个表保存的_数据,这样即使代理在以后的分析周期中删除行,我也可以使用数据

我使用的是mysql版本14.14发行版5.7.13。

您可以使用触发器:

代码和插入后触发器,如中的示例所示

大概是这样的:

DELIMITER //

CREATE TRIGGER Back_Analysis_Data 
AFTER INSERT
   ON Analysis_Data FOR EACH ROW

BEGIN

   INSERT INTO Saved_Data ( Col1, Col2 )
   VALUES ( NEW.Col1, NEW.Col2 );

END; //

DELIMITER ;
您可以使用触发器:

代码和插入后触发器,如中的示例所示

大概是这样的:

DELIMITER //

CREATE TRIGGER Back_Analysis_Data 
AFTER INSERT
   ON Analysis_Data FOR EACH ROW

BEGIN

   INSERT INTO Saved_Data ( Col1, Col2 )
   VALUES ( NEW.Col1, NEW.Col2 );

END; //

DELIMITER ;

我建议不要使用触发器和存储过程,因为它们不能扩展。创建第二个表只是MySQL额外的维护和存储开销

这方面的最佳实践是在客户端代码上实现软删除。为此,您需要在分析数据中添加一个名为“软删除”的附加列,如下所示:

DELIMITER //

CREATE TRIGGER Back_Analysis_Data 
AFTER INSERT
   ON Analysis_Data FOR EACH ROW

BEGIN

   INSERT INTO Saved_Data ( Col1, Col2 )
   VALUES ( NEW.Col1, NEW.Col2 );

END; //

DELIMITER ;
ALTER表分析数据 添加列软\u删除TINYINT非空默认值0 添加键软键删除键(
soft\u delete

然后,您的查询将读取未删除的数据 从分析数据中选择*软删除!=0限制10

一起读取已删除/未删除的数据
选择*from Analysis_Data limit 10

我建议不要使用触发器和存储过程,因为它们不能扩展。创建第二个表只是MySQL额外的维护和存储开销

这方面的最佳实践是在客户端代码上实现软删除。为此,您需要在分析数据中添加一个名为“软删除”的附加列,如下所示:

DELIMITER //

CREATE TRIGGER Back_Analysis_Data 
AFTER INSERT
   ON Analysis_Data FOR EACH ROW

BEGIN

   INSERT INTO Saved_Data ( Col1, Col2 )
   VALUES ( NEW.Col1, NEW.Col2 );

END; //

DELIMITER ;
ALTER表分析数据 添加列软\u删除TINYINT非空默认值0 添加键软键删除键(
soft\u delete

然后,您的查询将读取未删除的数据 从分析数据中选择*软删除!=0限制10

一起读取已删除/未删除的数据
选择*from Analysis_Data limit 10

非常感谢您引入术语软删除。这是我第一次听说软删除:)用谷歌搜索一下软删除我发现了这个,在我的场景中,软删除可能不是一个好主意。但你的回答最终让我找到了我的答案。再次感谢!不利的一面是可能会有很多不规则的行,我们都知道我们的查询(好的,其他人的查询)通常是完整的表扫描或“部分关闭一个where”via。事实上,可以说,大多数op问题将展示一个可怕的模式,与它们实际拥有的go-to查询相对比。所以我会把这些行放到另一个归档表中。对于较小的表,软删除非常感谢引入术语软删除。这是我第一次听说软删除:)用谷歌搜索一下软删除我发现了这个,在我的场景中,软删除可能不是一个好主意。但你的回答最终让我找到了我的答案。再次感谢!不利的一面是可能会有很多不规则的行,我们都知道我们的查询(好的,其他人的查询)通常是完整的表扫描或“部分关闭一个where”via。事实上,可以说,大多数op问题将展示一个可怕的模式,与它们实际拥有的go-to查询相对比。所以我会把这些行放到另一个归档表中。对于较小的表,软删除非常好