Mysql SQL更新表列默认空查询

Mysql SQL更新表列默认空查询,mysql,sql,sql-server,alter-table,Mysql,Sql,Sql Server,Alter Table,我试图制作一个php脚本来更新表列结构 Name Type Collation Attributes Null Default promotion_dt date No 0000-00-00 我想更新结构以将默认值更改为NULL,然后我想用NULL替换所有0000-00-00数据 sql_查询是什么?一种方法是首先将表更改为允许nul

我试图制作一个php脚本来更新表列结构

Name                Type         Collation  Attributes      Null    Default
promotion_dt        date                                    No      0000-00-00  
我想更新结构以将默认值更改为NULL,然后我想用NULL替换所有0000-00-00数据


sql_查询是什么?

一种方法是首先将表更改为允许null,然后更改默认值,最后更新等于默认值的现有值

ALTER TABLE tbl MODIFY promotin_dt DATE DEFUALT NULL;
 UPDATE tbl SET primotion_dt = NULL WHERE promotin_dt = '0000-00-00';
-- Set nullable and update the default
ALTER TABLE myTable CHANGE promotion_dt promotion_dt DATE NULL DEFAULT NULL;   

-- Update the old values to the new default
UPDATE myTable SET promotion_dt=NULL WHERE promotion_dt='0000-00-00';

您需要在两个查询中执行此操作:

ALTER TABLE mytable MODIFY promotion_dt date NULL DEFAULT NULL;
其次是:

UPDATE mytable SET promotion_dt=NULL where promotion_dt="0000-00-00";
注意:

正如我刚才从Joachim的回答中了解到的,我们也可以使用
CHANGE
,而不是第一个查询中的
MODIFY
,记住这两种语法是:

ALTER TABLE mytable 
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]

也就是说,
CHANGE
甚至允许更改列名,因此需要两个列名,而
MODIFY
保持列名不变

谢谢,效果很好!