在PHP中使用Mysql触发器或编码?

时间:2014-12-02 04:45:34

标签: php mysql pdo triggers

我有一张表hardware_description

+------------------+--------------+------+-----+---------+----------------+
| 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_id来自foreign key表格employees

当我更新特定行时,我希望该行的现有数据与该update操作的时间戳一起保存在另一个表中。现在,

a)我应该使用PHP代码(PDO transaction)来抢占该行&插入另一个表然后在该特定行上执行UPDATE查询?

b)在此表上使用trigger

哪个过程是更好的做法&更高效?还有另一种方法可以达到这个目的吗?

到目前为止,我在短暂的职业生涯中没有使用trigger,但如果是更好的练习,我可以做到。

1 个答案:

答案 0 :(得分:2)

如果你可以做一个触发器,那么使用它会好得多。

原因是如果由于某种原因你忘记编写PHP代码来执行此操作(在一些奇怪的情况下) - 你会丢失无关的数据 - 否则称为孤立数据,它们没有相应的一行或一组行。

以下是触发器的MySQL文档页面的链接:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html