ALTER TABLE
描述
ALTER TABLE
改变一张表的结构或属性。
RENAME
ALTER TABLE RENAME TO
命令更改数据库中现有表的名字。表重命名命令不能用于在数据库之间移动表,只能在同一数据库中重命名表。
如果表被缓存,命令会清除表的缓存数据。缓存将在下次访问表时被惰性填充。此外:
- 表重命名命令取消缓存所有表的依赖项,如引用表的视图。这些依赖项应显式地再次缓存。
- 分区重命名命令清除所有表依赖项的缓存,同时保持它们为缓存。因此,当它们下次被访问时,它们的缓存将被惰性填充。
语法
ALTER TABLE table_identifier RENAME TO table_identifier
参数
table_identifier
指定一个表名,该表名可以可选地与数据库名称一起指定。
语法:
[ database_name. ] table_name
ADD COLUMNS
ALTER TABLE ADD COLUMNS
语句将提到的列添加到现有的表中。
语法
ALTER TABLE table_identifier ADD ( COLUMN | COLUMNS ) [ ( ] col_spec [ , ... ] [ ) ]
参数
table_identifier
指定一个表名,该表名可以可选地与数据库名称一起指定。
语法:
[ database_name. ] table_name
COLUMNS ( col_spec )
指定要添加的列。
DROP COLUMNS
ALTER TABLE DROP COLUMNS
语句将提到的列添加到现有的表中.
语法
ALTER TABLE table_identifier DROP { COLUMN | COLUMNS } [ ( ] col_name [ , ... ] [ ) ]
参数
table_identifier
指定一个表名,该表名可以与数据库名一起使用。
语法:
[ database_name. ] table_name
col_name
指定要删除的列名。
RENAME COLUMN
ALTER TABLE RENAME COLUMN
语句更改现有表的列名。
语法
ALTER TABLE table_identifier RENAME COLUMN col_name TO col_name
参数
table_identifier
指定一个表名,该表名可以可选地与数据库名称一起指定。
语法:
[ database_name. ] table_name
col_name
指定列名。
ALTER OR CHANGE COLUMN
ALTER TABLE ALTER COLUMN
或 ALTER TABLE CHANGE COLUMN
语句更改列的定义.
语法
ALTER TABLE table_identifier { ALTER | CHANGE } [ COLUMN ] col_name alterColumnAction
参数
table_identifier
指定一个表名,该表名可以可选地与数据库名称一起指定。
语法:
[ database_name. ] table_name
col_name
指定列名
alterColumnAction
改变列的定义
REPLACE COLUMNS
ALTER TABLE REPLACE COLUMNS
语句删除所有现有列并添加新的一组列。
语法
ALTER TABLE table_identifier REPLACE COLUMNS
( qualified_col_type_with_position_list )
参数
table_identifier
指定一个表名,该表名可以可选地与数据库名称一起指定。
语法:
[ database_name. ] table_name
qualified_col_type_with_position_list
被添加的列的列表
语法:
col_name col_type [ col_comment ] [ col_position ] [ , ... ]
示例
-- 重命名表
DESC student;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+--------+---------+-------+
ALTER TABLE student RENAME TO studentInfo;
-- 重命名表后
DESC studentInfo;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+--------+---------+-------+
-- 向表中加入列
DESC studentInfo;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+--------+---------+-------+
ALTER TABLE studentInfo ADD columns (LastName string, DOB timestamp);
-- 向表中添加列之后
DESC studentInfo;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|LastName| string| NULL|
| DOB|timestamp| NULL|
+--------+---------+-------+
-- 删除表中的列
DESC studentInfo;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|LastName| string| NULL|
| DOB|timestamp| NULL|
+--------+---------+-------+
ALTER TABLE studentInfo DROP columns (LastName, DOB);
-- 删除表中的列之后
DESC studentInfo;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+--------+---------+-------+
-- 重命名表中的列
DESC studentInfo;
+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+--------+---------+-------+
ALTER TABLE studentInfo RENAME COLUMN name TO FirstName;
-- 重命名表中的列之后
DESC studentInfo;
+---------+---------+-------+
| col_name|data_type|comment|
+---------+---------+-------+
|FirstName| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+---------+---------+-------+
-- 修改表中的列
DESC studentInfo;
+---------+---------+-------+
| col_name|data_type|comment|
+---------+---------+-------+
|FirstName| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
+---------+---------+-------+
ALTER TABLE studentInfo ALTER COLUMN FirstName COMMENT "new comment";
-- 修改表中的列之后
-- TODO 这里没生效
DESC studentInfo;
+---------+---------+-----------+
| col_name|data_type| comment|
+---------+---------+-----------+
|FirstName| string|new comment|
| rollno| int| NULL|
| age| int| NULL|
+---------+---------+-----------+
-- 替换表中的列
-- REPLACE COLUMNS
DESC studentInfo;
+---------+---------+-----------+
| col_name|data_type| comment|
+---------+---------+-----------+
|FirstName| string|new comment|
| rollno| int| NULL|
| age| int| NULL|
+---------+---------+-----------+
ALTER TABLE studentInfo REPLACE COLUMNS (name string, ID int COMMENT 'new comment');
-- After replacing COLUMNS
DESC studentInfo;
+--------+---------+-----------+
|col_name|data_type| comment|
+--------+---------+-----------+
| name| string| NULL|
| ID| int|new comment|
+--------+---------+-----------+