ALTER TABLE更改表的结构。比如,您可以添加或删除列,创建或销毁索引,更改现有列的类型,或重命名列或表本身。还可以更改特性,例如用于表或表注释的存储引擎。

ALTER TABLE tbl_name[alter_specification [, alter_specification] ...][partition_options]alter_specification:table_options| ADD [COLUMN] col_name column_definition[FIRST | AFTER col_name]| ADD [COLUMN] (col_name column_definition,...)| ADD {INDEX|KEY} [index_name][index_type] (key_part,...) [index_option] ...| ADD {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name](key_part,...) [index_option] ...| ADD [CONSTRAINT [symbol]] PRIMARY KEY[index_type] (key_part,...)[index_option] ...| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY][index_name] [index_type] (key_part,...)[index_option] ...| ADD [CONSTRAINT [symbol]] FOREIGN KEY[index_name] (col_name,...)reference_definition| ADD CHECK (expr)| ALGORITHM [=] {DEFAULT|INPLACE|COPY}| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}| CHANGE [COLUMN] old_col_name new_col_name column_definition[FIRST|AFTER col_name]| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]| {DISABLE|ENABLE} KEYS| {DISCARD|IMPORT} TABLESPACE| DROP [COLUMN] col_name| DROP {INDEX|KEY} index_name| DROP PRIMARY KEY| DROP FOREIGN KEY fk_symbol| FORCE| LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}| MODIFY [COLUMN] col_name column_definition[FIRST | AFTER col_name]| ORDER BY col_name [, col_name] ...| RENAME {INDEX|KEY} old_index_name TO new_index_name| RENAME [TO|AS] new_tbl_name| {WITHOUT|WITH} VALIDATIONpartition_options:partition_option [partition_option] ...partition_option:ADD PARTITION (partition_definition)| DROP PARTITION partition_names| DISCARD PARTITION {partition_names | ALL} TABLESPACE| IMPORT PARTITION {partition_names | ALL} TABLESPACE| TRUNCATE PARTITION {partition_names | ALL}| COALESCE PARTITION number| REORGANIZE PARTITION partition_names INTO (partition_definitions)| EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH|WITHOUT} VALIDATION]| ANALYZE PARTITION {partition_names | ALL}| CHECK PARTITION {partition_names | ALL}| OPTIMIZE PARTITION {partition_names | ALL}| REBUILD PARTITION {partition_names | ALL}| REPAIR PARTITION {partition_names | ALL}| REMOVE PARTITIONING| UPGRADE PARTITIONINGkey_part:col_name [(length)] [ASC | DESC]index_type:USING {BTREE | HASH}index_option:KEY_BLOCK_SIZE [=] value| index_type| WITH PARSER parser_name| COMMENT 'string'table_options:table_option [[,] table_option] ...table_option:AUTO_INCREMENT [=] value| AVG_ROW_LENGTH [=] value| [DEFAULT] CHARACTER SET [=] charset_name| CHECKSUM [=] {0 | 1}| [DEFAULT] COLLATE [=] collation_name| COMMENT [=] 'string'| COMPRESSION [=] {'ZLIB'|'LZ4'|'NONE'}| CONNECTION [=] 'connect_string'| {DATA|INDEX} DIRECTORY [=] 'absolute path to directory'| DELAY_KEY_WRITE [=] {0 | 1}| ENCRYPTION [=] {'Y' | 'N'}| ENGINE [=] engine_name| INSERT_METHOD [=] { NO | FIRST | LAST }| KEY_BLOCK_SIZE [=] value| MAX_ROWS [=] value| MIN_ROWS [=] value| PACK_KEYS [=] {0 | 1 | DEFAULT}| PASSWORD [=] 'string'| ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}| STATS_AUTO_RECALC [=] {DEFAULT|0|1}| STATS_PERSISTENT [=] {DEFAULT|0|1}| STATS_SAMPLE_PAGES [=] value| TABLESPACE tablespace_name [STORAGE {DISK|MEMORY}]| UNION [=] (tbl_name[,tbl_name]...)partition_options:(see CREATE TABLE options)

允许生成列的ALTER TABLE操作是ADDMODIFYCHANGE

  • 可以添加生成的列。

CREATE TABLE t1 (c1 INT);
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
  • 可以修改生成列的数据类型和表达式。
CREATE TABLE t1 (c1 INT, c2 INT GENERATED ALWAYS AS (c1 + 1) STORED);
ALTER TABLE t1 MODIFY COLUMN c2 TINYINT GENERATED ALWAYS AS (c1 + 5) STORED;--修改c2的类型
  • 如果没有其他列引用它们,则可以重命名或删除生成的列。
CREATE TABLE t1 (c1 INT, c2 INT GENERATED ALWAYS AS (c1 + 1) STORED);
ALTER TABLE t1 CHANGE c2 c3 INT GENERATED ALWAYS AS (c1 + 1) STORED;--把c2改为c3
ALTER TABLE t1 DROP COLUMN c3;--删除c3
  • 虚拟生成的列不能更改为存储的生成列,反之亦然。要解决此问题,请删除该列,然后使用新定义添加该列。
CREATE TABLE t1 (c1 INT, c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL);
ALTER TABLE t1 DROP COLUMN c2;
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
  • 非生成列可以更改为已存储但不是虚拟生成列。
CREATE TABLE t1 (c1 INT, c2 INT);
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
  • 存储但不是虚拟生成的列可以更改为非生成列。存储的生成值将成为非生成列的值。
CREATE TABLE t1 (c1 INT, c2 INT GENERATED ALWAYS AS (c1 + 1) STORED);
ALTER TABLE t1 MODIFY COLUMN c2 INT;

总结,虚不可转实,实不可转虚,非可以转实,实可以转非。

虚为自动关联生成的虚拟列,实为自动生成的存储字段,非为普通字段。

未完待续。。。

sql语句语法数据定义语句alter table相关推荐

  1. oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...

    oracle(sql)基础篇系列(三)--数据维护语句.数据定义语句.伪列 DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 ...

  2. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

    添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...

  3. mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)

    ALTER TABLE 语句 ALTER TABLE更改表的结构.例如,可以添加或删除列.创建或销毁索引.更改现有列的类型.重命名列或表本身.还可以更改表特性,例如用于表或表注释的存储引擎. ●要使用 ...

  4. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  5. MySQL修改数据表(ALTER TABLE语句)

    为实现数据库中表规范化设计的目的,有时候需要对之前已经创建的表进行结构修改或者调整. 在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列.创建或取消索引.更改 ...

  6. 3.1 《数据库系统概论》SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)

    文章目录 0.前言 1.思维导图 2.SQL概述 (1)什么是SQL? (2)SQL的特点 (3) SQL的基本概念 3.数据字典 4.数据定义 (1)数据定义概览 (2)模式的定义与删除---SCH ...

  7. 笔记:SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)

    SQL概述及数据定义(模式SCHEMA.表TABLE.索引INDEX)的学习笔记.修改与补充 目录 0.前言 1.思维导图 2.SQL概述 (1)什么是SQL? (2)SQL的特点 (3) SQL的基 ...

  8. mysql数据定义语句有哪些_MySQL语法一:数据定义语句 钓鱼翁

    MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...

  9. mysql数据表交叉引用_数据定义语句

    数据定义语句 MySQL 8.0支持原子数据定义语言(DDL)语句.此功能称为原子DDL.原子DDL语句将数据字典更新,存储引擎操作和与DDL操作相关联的二进制日志写入操作组合到单个原子事务中.即使事 ...

最新文章

  1. TensorFlow教程之进阶指南 3.4 TensorBoard: 图表可视化
  2. 深入剖析.NET运行机制
  3. SAP UI5 CRM Reuse Fiori应用 note.js代码审查结果
  4. 绘制五彩泡泡python_五彩泡泡教案
  5. netflix_Netflix播放按钮剖析
  6. MySQL5.7.9安装与配置优化
  7. 8个球放入3个盒子方式_颜值与美味并存~分享几款私房盒子蛋糕做法,再也不用排队买了...
  8. python爬小说目录_【python入门爬虫】爬取笔趣阁小说
  9. win 8.1 安装framework3.5
  10. 怎么对接口做幂等性操作?
  11. 基于MATLAB的数字基带通信系统仿真
  12. AV1:比HEVC/H.265更有效率的视频编码格式?
  13. 小新黑苹果声卡ID注入
  14. 基于SSM的图书馆管理系统
  15. html5设置谷歌浏览器兼容性,谷歌浏览器如何设置兼容性视图_谷歌浏览器设置兼容性视图的方法-系统城...
  16. 5年400倍增长,Airbnb首位数据科学家揭秘他们到底怎么做的?
  17. Mac Chrome浏览器快捷键大全
  18. FreeRtos软件定时器复习
  19. 企业微信内容如何值入广告?
  20. 【英语面试】一.计算机专业英语面试常见问题(家庭/家乡/学校篇)

热门文章

  1. (function ($, undefined){ })(jQuery); 的使用及说明
  2. 大文件分块计算MD5值 C++实现
  3. mysql自定义函数示例代码,以及属性介绍
  4. 少儿python培训课
  5. markdown中关于空格缩进的问题
  6. 业务和商业才是技术的驱动力
  7. CSP拼图问题--矩阵快速幂
  8. day05_步入百万年薪的第五天
  9. KaTex各种语法汇总
  10. 基础知识--封装、继承、多态、抽象