我正在尝试创建一个包含多个TIMESTAMP列的表。
即使我没有为所有TIMESTAMP列指定CURRENT_TIMESTAMP
,我也从phpmyadmin收到#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
错误。所以我可以说phpmyadmin隐式使用CURRENT_TIMESTAMP
作为默认值,并使用属性ON UPDATE CURRENT_TIMESTAMP
作为第一个TIMESTAMP列。
我认为这个要求(只有一个TIMESTAMP列可以有CURRENT_TIMESTAMP
作为默认值)我自己很奇怪,但我真的很沮丧的是无法用phpmyadmin创建多个TIMESTAMP列。
是phpmyadmin的bug吗? (我怀疑phpmyadmin会有这样的错误)
是phpmyadmin功能吗?
我能绕过它吗?
答案 0 :(得分:0)
只允许一个INT具有AUTO_INCREMENT修饰符。
以类似的方式,只允许一个TIMESTAMP使用CURRENT_TIMESTAMP修饰符。
如果您需要多个TIMESTAMP,那么所有这些列都应定义为DATETIME或TIMESTAMP,而不是CURRENT_TIMESTAMP
如果可以并粘贴此
select version();
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb
CREATE TABLE mytable
(
id INT NOT NULL AUTO_INCREMENT,
ts1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
ts2 TIMESTAMP,
dt1 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt2 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
SHOW CREATE TABLE mytable\G
你得到了这个
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.21 |
+-----------+
1 row in set (0.00 sec)
mysql> DROP DATABASE IF EXISTS mydb;
Query OK, 1 row affected (0.23 sec)
mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.00 sec)
mysql> USE mydb
Database changed
mysql> CREATE TABLE mytable
-> (
-> id INT NOT NULL AUTO_INCREMENT,
-> ts1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-> ts2 TIMESTAMP,
-> dt1 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-> dt2 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.30 sec)
mysql> SHOW CREATE TABLE mytable\G
*************************** 1. row ***************************
Table: mytable
Create Table: CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ts1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ts2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`dt1` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`dt2` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql>
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
您可以使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
试一试!!!
有关详细信息,请阅读MySQL文档中的Automatic Initialization and Updating for TIMESTAMP and DATETIME。
就phpmyadmin而言,它受到mysql的支配。如果mysql不允许这样,phpmyadmin也不会。