简短的:
我遇到了奇怪的 MySQL 行为 -虽然我不想添加它,但正在添加更新 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 不应该创建任何他没有被要求的东西。
有谁知道为什么要添加这些条款?