该CHANGE,MODIFY和 ALTER子句可以改变现有列的名称和定义。他们有这些比较特征:

CHANGE:

  • 可以重命名列并更改其定义,或两者都可以。

  • 具有更多的能力MODIFY,但是以某些操作的便利为代价。 CHANGE如果不重命名,则需要命名该列两次。

  • 使用FIRSTor AFTER,可以重新排列列。

MODIFY:

  • 可以更改列定义,但不能更改其名称。

  • 比CHANGE改变列定义而不重命名更方便。

  • 使用FIRSTor AFTER,可以重新排列列。

ALTER:仅用于更改列默认值。

CHANGE是标准SQL的MySQL扩展。 MODIFY是Oracle兼容性的MySQL扩展。

要更改列以更改其名称和定义,请使用 CHANGE指定新名称和新定义的名称。例如,要将INT NOT NULL列重命名a为 b并更改其定义以BIGINT在保留NOT NULL属性的同时使用 数据类型 ,请执行以下操作:

ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;

要更改列定义但不更改其名称,请使用 CHANGE或MODIFY。使用时 CHANGE,语法需要两个列名,所以您必须指定两次相同的名称才能保持名称不变。例如,要更改列的定义 b,请执行以下操作:

ALTER TABLE t1 CHANGE b b INT NOT NULL;

MODIFY 更改定义而不更改名称更方便,因为它仅需要一次列名称:

ALTER TABLE t1 MODIFY b INT NOT NULL;

要更改列名称而不是其定义,请使用 CHANGE。该语法需要列定义,因此要保持定义不变,您必须重新指定列当前具有的定义。例如,要将INT NOT NULL列 重命名b为a,请执行以下操作:

ALTER TABLE t1 CHANGE b a INT NOT NULL;

对于使用CHANGEor的 列定义更改MODIFY,定义必须包括数据类型以及应用于新列的所有属性,而不是索引属性(如PRIMARY KEYor) UNIQUE。原始定义中存在但未为新定义指定的属性不会继续执行。假设列col1被定义为,INT UNSIGNED DEFAULT 1 COMMENT 'my column'并且您按如下方式修改该列,意图仅更改INT为 BIGINT:

ALTER TABLE t1 MODIFY col1 BIGINT;

这种说法从改变数据类型INT 来BIGINT,但它也下降了 UNSIGNED,DEFAULT和 COMMENT属性。要保留它们,声明必须明确地包含它们:

ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';

对于使用CHANGEor的 数据类型更改MODIFY,MySQL会尝试尽可能将现有列值转换为新类型。

警告

此转换可能会导致数据更改。例如,如果缩短字符串列,则值可能会被截断。如果转换为新数据类型会导致数据丢失,要防止操作成功,ALTER TABLE请在使用前启> 用严格SQL模式(请参见 第5.1.8节“服务器SQL模式”)。

如果使用CHANGE或MODIFY 缩短列上存在索引的列,并且结果列长度小于索引长度,则MySQL会自动缩短索引。

对于CHANGE重命名的列,MySQL会自动将这些引用重命名为已重命名的列:

引用旧列的索引,包括索引和禁用MyISAM索引。

指向旧列的外键。

对于重命名的列CHANGE,MySQL不会自动将这些引用重命名为重命名列:

生成引用重命名列的列和分区表达式。您必须使用CHANGE重新定义与ALTER TABLE重命名该列的语句相同的 语句。

视图和存储的程序引用了重命名的列。您必须手动更改这些对象的定义以引用新的列名称。

要对表格中的列重新排序,请使用FIRST 和AFTER输入CHANGE或 MODIFY操作。

ALTER ... SET DEFAULTALTER ... DROP DEFAULT为列指定新的默认值或分别删除旧的默认值。如果删除旧的默认值并且该列可以NULL,则新的默认值为NULL。如果该列不可用 NULL,MySQL将按照第11.7节“数据类型默认值”中所述分配默认值。

最新文章

  1. 设置float之后vertical-align失效
  2. AspNet MVC与T4,我定制的视图模板
  3. 使用Guava提供的filter过滤集合
  4. 如何解决loadrunner回放日志中的乱码问题
  5. android-数据存储之外部file存储(sdcard)
  6. Git 版本管理
  7. HDU 4679 Terrorist’s destroy
  8. JQUERY1.9学习笔记 之基本过滤器(九) 小于选择器
  9. 机器学习十大算法 之 kNN(一)
  10. CKfinder中文乱码的解决.
  11. JAVA 跑马灯文字效果
  12. JavaScript new Boolean(false) 其实是true
  13. Office 365 Connectors 的使用与自定义开发
  14. ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)
  15. django + 阿里云云服务器网站搭建
  16. java开发人员win10配置
  17. luogu P3978 [TJOI2015]概率论
  18. BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)
  19. studio之mac快捷键
  20. java中六个时间类的使用和区别

热门文章

  1. MySQL事务(三)
  2. python记录_day08
  3. 惊世骇俗的sql语句之连表查询
  4. DP 要求将承载量花光的01背包问题
  5. Seagull License Server 9.4 SR3 2781 完美激活(解决不能打印问题)
  6. 『TensorFlow』迁移学习
  7. 浅谈cookie、session
  8. HDU - 4456 cdq
  9. 2017-3-30/HTTP协议2
  10. springcloud之eureka配置——eureka.instance