我有张桌子,说:
- id (autoinc pk)
- name (varchar)
- description (varchar)
- yearofarrival (int) <- (should contain either 78, or 1998, that's why it is not a date field)
- date_updated <- auto-update field我需要的是设置一个触发器(我猜这是应该这样做的),在更新之后,如果字段“到达年份”发生了更改,它应该用当前日期更新“更新日期”。
任何其他字段的更改都不应该发生这种情况。
发布于 2014-03-07 13:19:54
触发器不能与调用触发器的行更新同一表的另一行。
这样做的典型方法是创建一个存储过程,该存储过程插入/更新目标表,然后更新另一行(S),所有这些都在事务中进行。
您的另一个选项可能是可以添加到表中的ON UPDATE约束。此选项只能从5.5以上开始使用。
举个例子:
mysql> create table your_table
(date_updated DATETIME ON UPDATE CURRENT_TIMESTAMP, yearofarrival int);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into your_table values (now() - INTERVAL 1 DAY, 100);
Query OK, 1 row affected (0.01 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from your_table;
+---------------------+---------------+
| date_updated | yearofarrival |
+---------------------+---------------+
| 2014-03-06 12:00:59 | 100 |
+---------------------+---------------+
1 row in set (0.00 sec)
mysql> update your_table set yearofarrival= 1998;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from your_table;
+---------------------+---------------+
| date_updated | yearofarrival |
+---------------------+---------------+
| 2014-03-07 12:01:16 | 1998 |
+---------------------+---------------+
1 row in set (0.00 sec)通过将此约束添加到您的列中,每次更新yearofarrival列时,date_updated都将自动使用CURRENT_TIMESTAMP值更新!
https://dba.stackexchange.com/questions/60417
复制相似问题