我的情况是这样的:
x
。x_history
。x_history
将拥有自己的自动递增ID列,称之为histid
。我有100多个表来应用它,所以我正在寻找一个通用触发器,可以用于任何表将一行备份到历史表中。只有2个表名称应在触发器之间变化。指定所有列名称实际上并不是我想要的。
我需要在MySQL中执行此操作,但也添加了MSSQL - 我知道两者都可以很容易地在一个和另一个之间进行转换。
答案 0 :(得分:3)
通常,触发器不是用于此类目的的最佳解决方案。 如果可能,您可能需要考虑更改数据库设计。 通常情况下,处理此类事情的更好方法是在源表中保留漏洞历史记录,并有一个状态列,告诉您每行是否已删除,更新或当前。
我几乎没有使用MySql的经验,但是我在过去的7年或8年里一直在使用Sql server,所以我要说的是sql server,但MySql可能会有所不同。< / p>
如果您选择使用触发器方法,请记住,即使更新未更改行数据,更新触发器也会执行(例如update tableName set col1 = 1其中idCol = 4,更新触发器将是即使更新前的col1值为1也执行,因此没有更改数据。)
对于SqlServer,您可能需要考虑一个只有6列的公共历史表:
1.身份栏
2.表名列
3. Row Id列(原始表中的原始id)
4.行状态列(例如更新,删除)
5.行动日期(行被复制到历史表的日期)
6.行内容列(这应该是XML数据类型(不确定MySql是否具有此类数据))
然后您所要做的就是使用“SELECT * FROM deleted / inserted FOR XML AUTO”来创建第6个内容。柱。