向现有带有数据的表中添加新的非空列

6

我想在已有数据的MySQL 5.7表中添加一个新的NOT NULL列。我看过this question,并使用了那里建议的解决方案。

我将新列添加为NULL,为新列填充数据,然后将该列从NOT NULL更改为NULL

-- 1. add new column as null
ALTER TABLE `mytable` ADD COLUMN newCol BIT NULL AFTER curCol;

-- 2. populate default data for new column
SET sql_safe_updates = 0;
UPDATE `mytable` SET newCol = 0;
SET sql_safe_updates = 1;

-- 3. change the column to NOT NULL
ALTER TABLE `mytable` ALTER COLUMN newCol BIT NOT NULL;

但是在最后一个命令中,我遇到了以下错误:

错误代码:1064。您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式,位于第1行附近的“BIT NOT NULL:”


你正在运行哪个版本的MySQL? - Dai
我正在使用MySQL 5.7(目前在MySQL Workbench中运行)。 - Hooman Bahreini
修改列 newCol 为 BIT 类型,且不允许为空。 - Vitaly Borisov
@VitalyBorisov:抱歉,那是问题中的一个打字错误,我已经更新了。 - Hooman Bahreini
Oracle公司销售(或免费提供)多个数据库,其中包括:他们的旗舰产品Oracle RDBMS、MySQL和Oracle RDB。ALTER TABLE... ALTER COLUMN...看起来像是Oracle RDB语法。Oracle RDB是在DEC长时间的死亡挣扎期间于1994年被Oracle从Digital Equipment Corporation收购的,在此之前,DEC被Compaq收购(后来被HP收购)。所有这些不同的数据库产品都使用不同的DDL语句语法(CREATE TABLE、ALTER TABLE等),并具有不同的功能。生活难道不美好吗? :-) - Bob Jarvis - Слава Україні
这对我有用 https://dev59.com/yXRB5IYBdhLWcg3wNk53#689782 - Deepam Gupta
2个回答

4
您可以通过以下三个步骤完成此操作:
  1. Add your new column (initially, let it have NULL values)

    ALTER TABLE my_table ADD COLUMN new_col datatype NULL AFTER cur_col;
    
  2. Update the table so that there are no NULL in our new column

    UPDATE my_table SET new_col = 0 WHERE new_col IS NULL;
    
  3. Modify our new column to NOT NULL

    ALTER TABLE my_table MODIFY COLUMN new_col datatype NOT NULL;
    

参考链接:StackOverflow- 将列从 null 改为非 null


4

这段SQL在MySQL中无效:

ALTER TABLE `mytable` ALTER COLUMN newCol BIT NOT NULL;

相反,考虑以下内容:
ALTER TABLE `mytable` MODIFY newCol BIT NOT NULL;

参考文献: MySQL ALTER TABLE 语法


谢谢,它起作用了。这个版本是否特定?修改后能在其他版本的MySQL中工作吗? - Hooman Bahreini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接