【问题标题】:Modify column Vs change column修改列与更改列
【发布时间】:2013-01-23 21:36:35
【问题描述】:

我知道,我们不能用modify column syntax重命名列,但可以change column syntax

我的问题是:modify syntax的主要用途是什么?

例如,

alter table tablename change col1 col1 int(10) not null

而不是

alter table tablename modify col1 int(10) not null



已编辑
问题已替换

modify syntax的主要用途是什么?

上面的问题被下面替换了

为什么我们必须使用更改列而不是修改列?

【问题讨论】:

  • 因为我猜mysql的创造者就是这么决定的
  • 可能是因为人们低估了命名事物的价值。

标签: mysql alter-table


【解决方案1】:

更改列 如果您已经创建了 MySQL 数据库,并且在您的某一列命名不正确后决定,您不需要删除它并进行替换,您可以使用 change column简单地重命名它>。

ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL FIRST;

修改列 这个命令可以完成 CHANGE COLUMN 可以做的所有事情,但不需要重命名列。如果需要在 MySQL 中调整列的大小,可以使用 modify SQL 命令。通过这样做,您可以允许比以前更多或更少的字符。您不能使用 modify 和 other 重命名列

ALTER TABLE MyTable MODIFY COLUMN foo VARCHAR(32) NOT NULL AFTER baz;

注意:ALTER TABLE 用于更改表,即更改列名、大小、删除列。没有 ALTER TABLE 命令的帮助,不能使用 CHANGE COLUMN 和 MODIFY COLUMN 命令。

【讨论】:

  • FIRSTAFTER 是什么词,它们是 sql 中的关键字吗?
  • FIRST - 将是表格左侧的第一个列; AFTER col_name - 列将位于此 col_name 之后。
  • 这对于在列上添加带有comment 'my comment' 的 cmets 尤其有用,而无需在语句中重新键入列的名称。
  • 关键字 COLUMN 在 MODIFY 语句中的作用是什么? MySQL 文档执行了相同的语句,但没有 COLUMN 关键字:dev.mysql.com/doc/refman/8.0/en/alter-table.html
【解决方案2】:

区别在于您是要更改列名、列定义还是两者都更改。

改变

可以更改列名或定义,或两者都更改
ALTER TABLE t1 CHANGE a b BIGINT NOT NULL

修改

可以更改列定义但不能更改其名称
ALTER TABLE t1 MODIFY b INT NOT NULL

重命名列(来自 MySQL 8.0)

可以更改列名,但不能更改其定义
ALTER TABLE t1 RENAME COLUMN b TO a


另外,CHANGEMODIFY 后面可以跟一个可选的 COLUMN 关键字。

完整解释:

  1. MySQL 5.7 Docs- Renaming, Redefining, and Reordering Columns
  2. MySQL 8.0 Docs- Renaming, Redefining, and Reordering Columns

【讨论】:

  • 最完整简洁的答案。
  • 缺少一件事 - CHANGE DEFAULT:用于设置或删除列的默认值,例如ALTER TABLE Foo ALTER COLUMN bar SET DEFAULT ‘hello world’;.
  • 另外,CHANGEMODIFY 后面可以跟一个可选的 COLUMN 关键字。
【解决方案3】:

在尝试将非 auto_increment 列转换为 auto_increment 一个多小时后,我发现了一个不同之处 声明:

alter table `doctor_experience` modify column `id` int(11) unsigned auto_increment

有效,但声明:

alter table `doctor_experience` change column `id` `id` int(11) unsigned auto_increment 

会报错。

【讨论】:

    【解决方案4】:

    那是一样的。这样做是为了支持另一种语法(据我所知,Oracle ALTER TABLE)。你可以同时使用它们。

    注意:ALTER TABLE CHANGE old_col_name new_col_name 语法允许使用一个命令重命名列。

    【讨论】:

      【解决方案5】:

      更改列:当我们想要更改列名及其定义时使用。 例如 - 更改表 student CHANGE name full_name VARCHAR(32) NOT NULL;

      修改列:当列名相同但定义发生变化时使用。 例如 - 更改表 student MODIFY full_name VARCHAR(64) NOT NULL;

      重命名列:当我们只需要更改列名时使用(其定义将相同) 更改表 student 重命名列 full_name TO name;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多