在创建表时,我收到以下错误:
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
Run Code Online (Sandbox Code Playgroud)
问题是,我实际上没有两列TIMESTAMP
同CURRENT_TIMESTAMP
为默认值,无论我使用ON UPDATE
条款.
我正在尝试执行的DDL查询是
CREATE TABLE user(
/* Basic Information */
id INT NOT NULL AUTO_INCREMENT,
firstname VARCHAR(255) NOT NULL,
surname VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(255) NOT NULL UNIQUE,
password CHAR(40) NOT NULL,
/* System status information */
active BOOL NOT NULL DEFAULT FALSE,
validated BOOL NOT NULL DEFAULT FALSE,
date_validated TIMESTAMP,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
/* Index */
PRIMARY KEY (id)
) Engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)
是什么导致了这个问题?
Fah*_*kar 18
您可以在一个表中使用两个时间戳.默认情况下,首先使用DEFAULT字段,然后使用其余时间戳字段.
下面的查询应该工作.
CREATE TABLE myTable
(
id INT,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
date_validated TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)
我认为重要的是要注意到MySQL 5.6.5中不再存在此限制.该限制已被删除,并添加了一些其他功能.具体来说:多个TIMESTAMP以及DATETIME字段可以具有自动默认值,该字段将字段设置为当前时间戳/日期时间,如以下博客文章中所述(显然由进行修复的人员编写):http:// optimize- this.blogspot.com/2012/04/datetime-default-now-finally-available.html
更多细节
此外,了解如何生成默认日期和时间值可能很有价值.
如下面的链接所示,您可以设置DATETIME和TIMESTAMP数据类型,以便该列具有DEFAULT值,该值是给定行的INSERT操作的当前日期和时间.或者,您可以将它们设置为ON UPDATE,以便在UPDATE操作的字段中设置当前日期和时间.
链接:http:
//dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
以下是CREATE TABLE语句中的两种情况:
CREATE TABLE t1 (
ts1 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,ts2 TIMESTAMP DEFAULT NOW()
);
Run Code Online (Sandbox Code Playgroud)
值得指出的是,CURRENT_TIMESTAMP是NOW()的别名.
此外,将TIMESTAMP或DATETIME字段设置为NULL会将列DEFAULT更改为null而不是日期时间值(再次参见链接了解详细信息和更多详细信息).
另一个有价值的观点是DATETIME可以包含以下日期范围:
1000-01-01到9999-12-31,
而TIMESTAMP的范围是:
1970-01-01 00:00:01到2038-01-19 03: 14:07
有关DATETIME和TIMESTAMP之间的其他比较,请阅读此MySQL手册页以进行比较.