【问题标题】:Adding a new NOT NULL column to an existing Table with data将新的 NOT NULL 列添加到包含数据的现有表
【发布时间】:2019-09-19 23:03:14
【问题描述】:

我想在 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?
  • 我使用的是 MySQL 5.7(目前在 MySQL Workbench 中运行)
  • ALTER COLUMN newCol BIT NOT NULL
  • @VitalyBorisov:对不起,这是一个错字,我已经更新了
  • Oracle Corporation 销售(或免费赠送)多个数据库,其中包括:他们的旗舰 Oracle RDBMS、MySQL 和 Oracle RDB。 ALTER TABLE...ALTER COLUMN... 看起来像 Oracle RDB 语法。 Oracle RDB 于 1994 年在 DEC 长期缓慢的死亡痛苦中被 Oracle 从 Digital Equipment Corporation 收购,之后 DEC 被 Compaq 收购(随后被 HP 收购)。所有这些不同的数据库产品对其 DDL 语句(CREATE TABLE、ALTER TABLE 等)使用不同的语法并具有不同的功能。生活不是盛大吗? :-)

标签: mysql sql


【解决方案1】:

这条 SQL 在 MySQL 中无效:

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

相反,请考虑:

ALTER TABLE `mytable` MODIFY newCol BIT NOT NULL;

参考:MySQL ALTER TABLE syntax

【讨论】:

  • 感谢它的工作。这个版本是特定的吗?修改是否可以在其他版本的 MySQL 中工作?
【解决方案2】:

您可以分三个步骤完成此操作:

  1. 添加您的新列(最初,让它有NULL 值)

    ALTER TABLE my_table ADD COLUMN new_col datatype NULL AFTER cur_col;
    
  2. 更新表格,使我们的新列中没有NULL

    UPDATE my_table SET new_col = 0 WHERE new_col IS NULL;
    
  3. 将我们的新列修改为NOT NULL

    ALTER TABLE my_table MODIFY COLUMN new_col datatype NOT NULL;
    

参考:StackOverflow- Altering a column: null to not null

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多