2014-12-02 57 views
1

我有一個表hardware_descriptionMysql觸發器或PHP中的編碼?

+------------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+------------------+--------------+------+-----+---------+----------------+ 
| Computer_id  | int(11)  | NO | PRI | NULL | auto_increment | 
| Emp_id   | int(11)  | NO | MUL | NULL |    | 
| PC_type   | varchar(20) | YES |  | NULL |    | 
| Operating_system | varchar(20) | YES |  | NULL |    | 
| Product_key  | varchar(30) | YES |  | NULL |    | 
| Assign_date  | date   | YES |  | NULL |    | 
| DVD_ROM   | varchar(20) | YES |  | NULL |    | 
| CPU    | varchar(30) | YES |  | NULL |    | 
| IP_address  | varchar(30) | YES |  | NULL |    | 
| MAC_address  | varchar(30) | YES |  | NULL |    | 
| Model_name  | varchar(30) | YES |  | NULL |    | 
| Model_number  | varchar(30) | YES |  | NULL |    | 
| Monitor   | varchar(30) | YES |  | NULL |    | 
| Processor  | varchar(30) | YES |  | NULL |    | 
| Product_name  | varchar(30) | YES |  | NULL |    | 
| RAM    | varchar(20) | YES |  | NULL |    | 
| Serial_number | varchar(30) | YES |  | NULL |    | 
| Vendor_id  | varchar(30) | YES |  | NULL |    | 

Emp_idemployeesforeign key

當我更新某一行時,我希望將該行的現有數據保存在另一個表中,以及該update動作的時間戳。現在,

a)應我使用PHP代碼(PDOtransaction)先抓住該行&插入另一個表中,然後在那個特定的行執行UPDATE查詢?

b)在此表上使用trigger

哪個過程更好練&效率更高?是否有另一種方法來實現這一點?

我在目前爲止的短期職業生涯中還沒有使用過trigger,但如果是更好的練習,我可以做到。

+0

這要看您的具體情況和資源。觸發器是做這類事情的好方法,但它的確意味着,隨着程序的發展,你將不得不併行維護兩個系統。它可能或不可能是你想要做的事情;只有你知道。 – 2014-12-02 05:02:33

回答

2

如果你可以做一個觸發器,使用它會好很多。

原因是,如果由於某種原因,您忘記編寫PHP代碼來執行此操作(在某種奇怪的情況下) - 您將丟失,無關的數據 - 也稱爲孤立數據,它沒有相應的行或一組行。

這裏的鏈接MySQL文檔頁面觸發器:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html