首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当同一表中的另一个字段更改值时,更新日期字段

当同一表中的另一个字段更改值时,更新日期字段
EN

Database Administration用户
提问于 2014-03-07 13:14:46
回答 1查看 7.3K关注 0票数 3

我有张桌子,说:

代码语言:javascript
复制
 - 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

我需要的是设置一个触发器(我猜这是应该这样做的),在更新之后,如果字段“到达年份”发生了更改,它应该用当前日期更新“更新日期”。

任何其他字段的更改都不应该发生这种情况。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-03-07 13:19:54

触发器不能与调用触发器的行更新同一表的另一行。

这样做的典型方法是创建一个存储过程,该存储过程插入/更新目标表,然后更新另一行(S),所有这些都在事务中进行。

您的另一个选项可能是可以添加到表中的ON UPDATE约束。此选项只能从5.5以上开始使用。

举个例子:

代码语言:javascript
复制
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值更新!

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/60417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档