Appearance
SQL ALTER TABLE
SQL ALTER TABLE 语句用于修改数据库表的结构,如添加列、修改列、删除列、添加约束、删除约束等。
语法
添加列
sql
ALTER TABLE table_name
ADD column_name datatype constraint;修改列
sql
-- 修改列的数据类型
ALTER TABLE table_name
MODIFY column_name new_datatype;
-- MySQL 语法
ALTER TABLE table_name
MODIFY COLUMN column_name new_datatype;
-- SQL Server 语法
ALTER TABLE table_name
ALTER COLUMN column_name new_datatype;删除列
sql
ALTER TABLE table_name
DROP COLUMN column_name;
-- MySQL 语法
ALTER TABLE table_name
DROP column_name;添加约束
sql
-- 添加主键约束
ALTER TABLE table_name
ADD PRIMARY KEY (column_name);
-- 添加外键约束
ALTER TABLE table_name
ADD FOREIGN KEY (column_name) REFERENCES referenced_table(referenced_column);
-- 添加唯一约束
ALTER TABLE table_name
ADD UNIQUE (column_name);
-- 添加检查约束
ALTER TABLE table_name
ADD CHECK (condition);
-- 添加默认约束
ALTER TABLE table_name
ALTER column_name SET DEFAULT default_value;删除约束
sql
-- 删除主键约束
ALTER TABLE table_name
DROP PRIMARY KEY;
-- 删除外键约束
ALTER TABLE table_name
DROP FOREIGN KEY constraint_name;
-- 删除唯一约束
ALTER TABLE table_name
DROP INDEX constraint_name;
-- 删除检查约束
ALTER TABLE table_name
DROP CHECK constraint_name;
-- 删除默认约束
ALTER TABLE table_name
ALTER column_name DROP DEFAULT;示例
示例 1:添加列
sql
-- 创建表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT
);
-- 添加 grade 列
ALTER TABLE students
ADD grade VARCHAR(20);
-- 添加 gender 列,并设置默认值
ALTER TABLE students
ADD gender VARCHAR(10) DEFAULT '未知';
-- 添加多个列
ALTER TABLE students
ADD (
email VARCHAR(100),
phone VARCHAR(20)
);示例 2:修改列
sql
-- 修改 age 列的数据类型
ALTER TABLE students
MODIFY age INT UNSIGNED;
-- 修改 name 列的长度和约束
ALTER TABLE students
MODIFY name VARCHAR(100) NOT NULL;
-- SQL Server:修改列的数据类型
ALTER TABLE students
ALTER COLUMN age INT UNSIGNED;示例 3:删除列
sql
-- 删除 email 列
ALTER TABLE students
DROP COLUMN email;
-- MySQL:删除 phone 列
ALTER TABLE students
DROP phone;示例 4:添加约束
sql
-- 添加唯一约束到 phone 列
ALTER TABLE students
ADD UNIQUE (phone);
-- 添加检查约束到 age 列
ALTER TABLE students
ADD CHECK (age >= 0 AND age <= 100);
-- 添加默认约束到 grade 列
ALTER TABLE students
ALTER grade SET DEFAULT '高一';示例 5:删除约束
sql
-- 删除唯一约束
ALTER TABLE students
DROP INDEX phone;
-- 删除检查约束
ALTER TABLE students
DROP CHECK check_age;
-- 删除默认约束
ALTER TABLE students
ALTER grade DROP DEFAULT;注意事项
权限:执行 ALTER TABLE 语句需要有修改表结构的权限。
数据影响:修改列的数据类型可能会影响现有数据,特别是当新数据类型与旧数据类型不兼容时。
性能影响:对于大型表,ALTER TABLE 操作可能会占用较多系统资源,影响数据库性能。
外键约束:修改或删除有外键引用的列时需要特别小心,可能需要先修改或删除相关的外键约束。
索引:添加或删除列时,相关的索引可能会自动更新或需要手动更新。
事务:在某些数据库系统中,ALTER TABLE 操作是不可回滚的。
小结
SQL ALTER TABLE 语句是修改数据库表结构的强大工具,通过它可以添加、修改、删除列,以及添加、删除约束等。在使用 ALTER TABLE 语句时,需要注意其对现有数据和系统性能的影响,特别是对于大型表的操作。在执行重要的表结构修改前,应该备份数据,以防止意外情况的发生。