MYSQL 5.7表具有3个类型为DATETIME'0000-00-00 00:00:00'的字段,当NOT NULL + DATETIME默认设置为'0000-00-00 00:00:00'时,如何将新结构更改为DEFAULT NULL。总共超过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个。
您需要分别更新行,不能对其使用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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句