首頁  >  文章  >  資料庫  >  MySQL中同时存在创建和上次更新时间戳字段解决方法浅析

MySQL中同时存在创建和上次更新时间戳字段解决方法浅析

WBOY
WBOY原創
2016-06-07 16:43:421058瀏覽

在写这篇文章之前,明确我的MySQL版本。 mysqlgt; SELECT VERSION();+------------+| VERSION() |+------------+| 5.5.29-log

在写这篇文章之前,明确我的MySQL版本。

mysql> SELECT VERSION();
+------------+
| VERSION()  |
+------------+
| 5.5.29-log |
+------------+
1 row in set (0.00 sec)

现在有这样的需求,一张表中有一个字段created_at记录创建该条记录的时间戳,,另一个字段updated_at记录更新该条记录的时间戳。

我们尝试以下几个语句。

第一个,测试通过。

 CREATE TABLE temp
(
 id INT(11) PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(10),
 updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

第二个,测试不通过。报ERROR 1293 (HY000)错误。(完整错误信息:ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause)

CREATE TABLE temp
(
 id INT(11) PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(10),
 created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
 updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

MySQL 5.5.29中有这样的奇葩限制,不明白为什么。既然有这样的限制,那么只有绕道而行,现在尝试给出如下几种解决办法。

第一种,created_at使用DEFAULT CURRENT_TIMESTAMP或者DEFAULT now(),updated_at使用触发器。

具体解决方法如下:

1.temp表结构如下:

CREATE TABLE temp
(
 id INT(11) PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(10),
 created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
 updated_at timestamp NULL
);

2.插入测试数据:

3.在temp上创建触发器,实现更新时记录更新时间;

delimiter |
DROP TRIGGER IF EXISTS tri_temp_updated_at;
CREATE TRIGGER tri_temp_updated_at BEFORE UPDATE ON temp
FOR EACH ROW
BEGIN
 SET NEW.updated_at = now();
END;
|
delimiter ;

4.测试。

 更多详情见请继续阅读下一页的精彩内容:

linux

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn