mysql - 没有默认值的时间戳列默认值出现错误 1067

标签 mysql sql mysql-workbench

我在 MySQL 5.5 中填充架构时遇到问题。每个表都有一个“create_time”和“update_time”,它们是时间戳。我更喜欢这些列没有默认值,但即使没有默认值,引用默认值时也会收到 1067 错误。

#1067 - Invalid default value for 'update_time' 

下面是我的脚本的一部分,由 MySQL Workbench 生成。

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `database` ;

CREATE TABLE IF NOT EXISTS `database`.`table` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `create_time` TIMESTAMP NOT NULL,
  `update_time` TIMESTAMP NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

如何使用这些时间戳创建此表?

最佳答案

来自 MySQL 文档:

As of MySQL 5.6.5, TIMESTAMP and DATETIME columns can be automatically initializated and updated to the current date and time (that is, the current timestamp). Before 5.6.5, this is true only for TIMESTAMP, and for at most one TIMESTAMP column per table. The following notes first describe automatic initialization and updating for MySQL 5.6.5 and up, then the differences for versions preceding 5.6.5.

由于您使用的是 5.5 并尝试使用 TIMESTAMP 数据类型设置两个属性,因此只能保证一个属性设置默认值。

这是有道理的,因为 update 列抛出错误,要初始化的第二个属性,不允许根据文档生成默认的 TIMESTAMP。

关于mysql - 没有默认值的时间戳列默认值出现错误 1067,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037353/

相关文章:

mysql - DELETE JOIN 出现问题

mysql - 如何解决 MySQL Workbench 上的这些行错误?

mysql - 最后一条记录的更新状态

php - 如何解决 "Call to undefined function AES_ENCRYPT"MySQL数据数组

mysql - 内连接返回重复的注册表

c# - 将大量数据从 txt、csv 文件插入到具有少量无效行的 SQL Server 表中

mysql - mysql中多删除和多表删除哪个更快?

mysql - 在 MYSQL 工作台中禁用每列排序?

php - 如果 A 中的列不重复,则将 tableA 复制到 tableB

sql - ")x"在查询中意味着什么?