2012-07-30 113 views
0

我在这里得到了一个任务来记录数据库中的更改。在更新/删除/插入时使用Mysql触发器

所以我刚刚读了关于触发器,这让我有兴趣尝试一下。

我得到这个数据库中的表是信息描述了客户,

(ID fornamn,efternam ..等是列名和信息下面是值)

此表被称为“昆德”

id fornamn  efternamn adress ort  postnummer foretag  telefon   email   personNmr husNmr organisationsNmr produkt  uppringd prioritet raderad 
15 Peter  Tressing adress ort  41676  foretag  071234565  [email protected] 123456  4  55658794   Nocria  1   0   0 

我称这个表kunder_log

id fornamn  efternamn adress ort  postnummer foretag  telefon   email   personNmr husNmr organisationsNmr produkt  uppringd prioritet raderad  timestamp type 

(唯一diffirance是指数的,而不是对ID主键和我添加的时间戳和类型)

(键入查询(插入件的类型,删除或更新))

现在我想当我执行更新/插入/删除查询时,触发表中每一行的更改。

但我只想插入所做的更改,而不是旧表中的每一列。

这是可能的还是你建议另一种方法?

+0

所以你说你只是想在触发器来显示更改后的列? – 2012-07-30 09:34:12

+0

Scott S:是的,我是 – oBo 2012-07-30 09:35:03

+0

好的,因为它听起来有点像你想**将某处的更改插入到另一个表中。 – 2012-07-30 09:37:33

回答

0

基本上有登录主表所做的所有更改两种方法:

  1. 触发是不错的选择,如果你想登录到表进行全球范围内的所有变化。

  2. 在插入,更新,删除所有存储过程中的语句后,将插入写入更改日志表中。

我通常更喜欢第二种方法,因为它比触发器快得多。

样本表结构:

kunder 
    all_columns 

kunder_log 
    change_log_id INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    all_columns 
    change_type ENUM('INSERT','UPDATE','DELETE'), 
    change_time TIMESTAMP NOT NULL DEFAULT 0, 
    change_description VARCHAR(1024) 
+0

我想避免第二种选择,但也许我必须去那个。 – oBo 2012-07-30 09:40:48

+0

好吧,那么你可以用第一种方法,因为它是实现它的简单方法。你只需要在表上写入触发器来进行插入,更新和删除操作。 – Omesh 2012-07-30 09:43:54

相关问题