【发布时间】:2013-01-16 10:42:58
【问题描述】:
简介:
我遇到了奇怪的 MySQL 行为 - on update CURRENT_TIMESTAMP 属性正在添加,尽管我不想添加它。我想知道为什么会发生这种情况 - 是我使用的 MySQL 服务器还是 MySQL Workbench (v5.2.38) 的问题。
细节:
我已经使用 EER 图对数据库结构进行了建模,示例表如下:
CREATE TABLE IF NOT EXISTS `privilege` (
`id` INT NOT NULL ,
`name` VARCHAR(64) NOT NULL COMMENT 'privilege name (just a label)' ,
`created_at` TIMESTAMP NOT NULL COMMENT 'when the privilege was created' ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
上面的脚本片段是使用WorkBench 中的Export > Forward Engineer SQL Create Script 创建的。 created_at 列在这里很重要。它不是 NULL,并且在定义记录时没有为时间戳定义默认值。所以我猜,如果有人试图在没有定义 created_at 的情况下插入记录,则会引发错误。
我在 MySQL 服务器中运行这个脚本来创建整个结构。并且创建的结构不同 - show create table privilege 返回以下内容:
CREATE TABLE `privilege` (
`id` int(11) NOT NULL,
`name` varchar(64) NOT NULL COMMENT 'privilege name (just a label)',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT 'when the privilege was created',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
“on update current_timestamp”从何而来?我 100% 确定我没有选择任何合适的选项,所以 MySQL 不应该创建任何他没有被要求的东西。
有人知道为什么要添加这些条款吗?
【问题讨论】:
标签: mysql attributes timestamp workbench