我正在尝试创建一个包含多个 TIMESTAMP 列的表。
即使我没有指定 CURRENT_TIMESTAMP
对于我收到的所有 TIMESTAMP 列 #1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
来自 phpmyadmin 的错误。所以我可以声明 phpmyadmin 隐式使用 CURRENT_TIMESTAMP
作为默认值和属性 ON UPDATE CURRENT_TIMESTAMP
对于第一个 TIMESTAMP 列。
我认为这一要求(只有一个 TIMESTAMP 列可以将 CURRENT_TIMESTAMP
作为默认值)本身很奇怪,但令我真正沮丧的是无法使用 phpmyadmin 创建多个 TIMESTAMP 列。
这是 phpmyadmin 的错误吗? (我怀疑phpmyadmin会有这样的bug)
是 phpmyadmin 功能吗?
我可以绕过它吗?
最佳答案
仅允许一个 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
拥有多个 DATETIME
尝试一下!!!
了解更多信息,请阅读Automatic Initialization and Updating for TIMESTAMP and DATETIME来自 MySQL 文档。
就phpmyadmin而言,它是受mysql支配的。如果 mysql 不允许这样做,phpmyadmin 也不会。
关于mysql - 无法使用 phpmyadmin 添加第二个 TIMESTAMP 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649606/