无法使用phpmyadmin添加第二个TIMESTAMP列

时间:2014-12-25 18:09:29

标签: mysql phpmyadmin

我正在尝试创建一个包含多个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功能吗?

我能绕过它吗?

1 个答案:

答案 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

不能有多个TIMESTAMP

您可以使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

多个DATETIME

试一试!!!

有关详细信息,请阅读MySQL文档中的Automatic Initialization and Updating for TIMESTAMP and DATETIME

就phpmyadmin而言,它受到mysql的支配。如果mysql不允许这样,phpmyadmin也不会。