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

标签 mysql phpmyadmin

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

的 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/

相关文章:

mysql - 在线词典 MySQL 的英文单词

mysql - 加载 XML 无法识别的语句类型

php - 使用 PHP Mysql 删除行

mysql - 连接类别和子类别

php - 错误的整数值 : '' for column 'user_id' at row 1

php - 仅对所有 4 个表成功插入或根本不插入

mysql - 如何在 phpmyadmin 中删除或替换数据库上的 mySQL 转储文件?

c# - 可移植 Asp.Net 软件

php - 计算一行中的数据类型

php - 从 PHP、mysql(页面中的多个查询)导出到 excel,代码无法正常运行?