【问题标题】:MYSQL 5.7 table 3 fields DATETIME '0000-00-00 00:00:00' how to alter new structure to DEFAULT NULLMYSQL 5.7 表 3 字段 DATETIME '0000-00-00 00:00:00' 如何将新结构更改为 DEFAULT NULL
【发布时间】:2019-12-19 20:46:01
【问题描述】:

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 个日期时间字段。

【问题讨论】:

  • 你的 SQL Alter 命令是什么,它产生了什么错误信息?
  • MySQL 有一个表中有多个DEFAULT CURRENT_TIMESTAMP 设置的问题,设置为DEFAULT NULL 必须有效。

标签: mysql


【解决方案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()

【讨论】:

  • 这是我得到的结果:不正确的日期时间值:'0000-00-00 00:00:00'
  • 1 个日期时间字段在结构中也有 NOT NULL。
  • 它非常适合我。可能有错别字,尝试执行我在编辑后的答案中输入的命令。
  • 我试过了,但是因为customers_dob datetime NOT NULL DEFAULT '0000-00-00 00:00:00',结果是:'customers_dob'的默认值无效
  • 包括 ALTER + UPDATE 在内的 SET 命令行现在可以工作了。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2014-10-10
相关资源
最近更新 更多