gpt4 book ai didi

mysql/工作台 : why is on update CURRENT_TIMESTAMP added for not null timestamp

转载 作者:行者123 更新时间:2023-11-29 05:31:24 29 4
gpt4 key购买 nike

简介:

我遇到了奇怪的 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 不应该创建任何他没有被要求创建的东西。

有谁知道为什么要添加这些条款?

最佳答案

根据 Automatic Initialization and Updating for TIMESTAMP 记录:

The following rules describe the possibilities for defining the first TIMESTAMP column in a table with the current timestamp for both the default and auto-update values, for one but not the other, or for neither:

[ <em>deletia</em> ]

  • With neither DEFAULT CURRENT_TIMESTAMP nor ON UPDATE CURRENT_TIMESTAMP, it is the same as specifying both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP.

[ <em>deletia</em> ]

To suppress automatic properties for the first TIMESTAMP column, do either of the following:

  • Define the column with a DEFAULT clause that specifies a constant default value.

  • Specify the NULL attribute. This also causes the column to permit NULL values, which means that you cannot assign the current timestamp by setting the column to NULL. Assigning NULL sets the column to NULL.

关于mysql/工作台 : why is on update CURRENT_TIMESTAMP added for not null timestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356499/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com