MYSQL 5.7表3字段DATETIME'0000-00-00 00:00:00'如何将新结构更改为DEFAULT NULL

时间:2019-08-13 09:53:35

标签: mysql

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个。

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()