10、ALTER TABLE 修改表结构
1、ALTER TABLE
是 SQL 中用于修改现有表结构的数据定义语言(DDL)语句。在已有的表中添加、修改或删除列字段,创建或者取消索引,更改字段类型,重命名字段或者表名等。
语法:
alter table 表名 [修改选项]
修改选项语法如下:
1)添加一个新字段
可以指定添加到哪个字段之后。
add column 字段名 类型(长度) [COMMENT 注释] [约束] [after 已经存在的字段名];
例如:
MariaDB [test]> show columns from w1; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | addr | char(4) | YES | | NULL | | | name | char(4) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec) MariaDB [test]> alter table w1 add num int(4) unique after name; Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0
2)删除字段
drop column 字段1,drop column 字段2,...;
删除多个字段得写多个drop,每个字段之间用逗号(,)隔开
例如:
MariaDB [test]> alter table w1 drop name,drop num; Query OK, 3 rows affected (0.07 sec) Records: 3 Duplicates: 0 Warnings: 0
3)只修改字段的数据类型和属性
不能修改字段名。
modify column 字段 新数据类型 约束条件;
例如:
MariaDB [test]> alter table w1 add name int(4) not null ; Query OK, 3 rows affected (0.06 sec) Records: 3 Duplicates: 0 Warnings: 0 MariaDB [test]> desc w1; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | addr | char(4) | YES | | NULL | | | num | char(4) | YES | | NULL | | | name | int(4) | NO | | NULL | | +-------+---------+------+-----+---------+-------+ 4 rows in set (0.00 sec) MariaDB [test]> alter table w1 modify name char(4) ; Query OK, 3 rows affected (0.08 sec) Records: 3 Duplicates: 0 Warnings: 0 MariaDB [test]> desc w1; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | addr | char(4) | YES | | NULL | | | num | char(4) | YES | | NULL | | | name | char(4) | YES | | NULL | | -- null在定义数据时为默认设置 +-------+---------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
4)修改字段名和数据类型
可以修改字段名和数据类型
CHANGE column 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
注意: 修改字段名必须在新字段名后面添加数据类型,就算数据类型还是原先的类型,也得再写一遍,无数据类型则修改不成功,报错。
MariaDB [test]> alter table w1 change name Name; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 MariaDB [test]> alter table w1 change name Name char(4); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
5)重命名列
RENAME COLUMN old_column_name TO new_column_name;
例如:
-- 将 employees 表中的 name 列重命名为 full_name ALTER TABLE employees RENAME COLUMN name TO full_name;
注: to 为可选参数,使用与否不影响结果
6)添加约束(ADD CONSTRAINT)
添加主键
ALTER TABLE logs ADD CONSTRAINT pk_log_id PRIMARY KEY (log_id);
-
ALTER TABLE logs:表示要修改名为logs的表结构 -
ADD CONSTRAINT pk_log_id-
ADD CONSTRAINT: 添加约束 -
pk_log_id: 为这个约束指定的名称(主键约束名)
-
-
PRIMARY KEY (log_id) -
PRIMARY KEY: 主键约束 -
(log_id): 指定log_id列作为主键
添加外键
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE;
-
ALTER TABLE orders-
表示要修改名为
orders的表结构
-
-
ADD CONSTRAINT fk_customer-
ADD CONSTRAINT: 添加约束 -
fk_customer: 为这个外键约束指定的名称
-
-
FOREIGN KEY (customer_id)-
FOREIGN KEY: 外键约束声明 -
(customer_id): 指定当前表(orders)中的外键列
-
-
REFERENCES customers(id)-
REFERENCES: 引用声明 -
customers(id): 指定被引用的主表(customers)和主键列(id)
-
-
ON DELETE CASCADE-
指定删除操作时的级联行为
-
2、另一种修改表名的语句
rename table 原表名1 to 新表名1,原表名1 to 新表名1,原表名2 to 新表名2,...;
例如:
MariaDB [test]> rename table w1 to test1; Query OK, 0 rows affected (0.02 sec)
3、删除表
drop table 表名;
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/14595334.html

浙公网安备 33010602011771号