【问题标题】:Not able to add second TIMESTAMP colunm with phpmyadmin无法使用 phpmyadmin 添加第二个 TIMESTAMP 列
【发布时间】:2014-12-25 18:09:29
【问题描述】:

我正在尝试创建一个包含多个 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 作为默认值,并在第一个 TIMESTAMP 列中使用属性 ON UPDATE CURRENT_TIMESTAMP

我想这个要求(只有一个 TIMESTAMP 列可以将CURRENT_TIMESTAMP 作为默认值)很奇怪,但我真正感到沮丧的是无法使用 phpmyadmin 创建多个 TIMESTAMP 列。

是 phpmyadmin 的错误吗? (我怀疑phpmyadmin会有这样的bug)

是 phpmyadmin 功能吗?

我能绕过它吗?

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    只允许一个 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 也不会。

    【讨论】:

    • 感谢您的回答。但是使用 SQL 语句创建表工作正常。问题主要是关于 phpmyadmin。
    • 此问题仅与 MySQL 有关。 Phpmyadmin 只是在坚持 MySQL。
    • 嗯...尝试在 phpmyadmin 中创建一个包含多个 TIMESTAMP 列的表 - 它不会这样做。但是,您可以使用 SQL 查询来做到这一点。
    • 你可以有多个TIMESTAMP,但只有一个TIMESTAMP可以有DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    • 我使用的是 MySQL 5.6.21。它允许多个时间戳。查看 5.6 文档 (dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html) 和 5.5 文档 (dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html) 并查看区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多