MYSQL 5.7表具有3个类型为DATETIME'0000-00-00 00:00:00'的字段,当NOT NULL + DATETIME默认设置为'0000-00-00 00:00时,如何将新结构更改为DEFAULT NULL: 00'。总共超过190.00条记录。
在更改结构时,MYSQL会发现有1个以上具有相同问题的字段,并且不会更改任何字段。 我该怎么解决?
CREATE TABLE `customers1` (
`customers_id` int( 11 ) NOT NULL ,
`customers_date_added` datetime DEFAULT '0000-00-00 00:00:00',
`customers_dob` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`customers_last_modified` datetime DEFAULT '0000-00-00 00:00:00',
`customers_active` tinyint( 1 ) DEFAULT '1'
) ENGINE = InnoDB DEFAULT CHARSET = utf8
ALTER TABLE `customers1` CHANGE `customers_date_added` `customers_date_added` datetime NULL ;
我希望并且需要将那些日期时间字段更正为NULL而不是'0000-00-00 00:00:00'。 我发现的问题是,在这种情况下,使用此旧设置的日期时间字段超过了1个。
答案 0 :(得分:-1)
您需要单独更新行,因此不能使用ALTER TABLE
命令。使用ALTER TABLE
命令可以添加具有NULL
值的新行,但是在不需要时不会更改行。
ALTER TABLE `customers1`
CHANGE `customers_date_added` `customers_date_added` datetime NULL,
CHANGE `customers_dob` `customers_dob` datetime NULL,
CHANGE `customers_last_modified` `customers_last_modified` datetime NULL;
UPDATE `customers1`
SET `customers_date_added` = NULLIF(`customers_date_added`, '0000-00-00 00:00:00'),
`customers_dob` = NULLIF(`customers_dob`, '0000-00-00 00:00:00'),
`customers_last_modified` = NULLIF(`customers_last_modified`, '0000-00-00 00:00:00');
在这里,我们在一个语句中更改所有错误的列,然后用另一条语句更新所有三列中的所有0000-00-00 00:00:00
值。
另请参阅:NULLIF()