Skip to content

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;

注意事项

  1. 权限:执行 ALTER TABLE 语句需要有修改表结构的权限。

  2. 数据影响:修改列的数据类型可能会影响现有数据,特别是当新数据类型与旧数据类型不兼容时。

  3. 性能影响:对于大型表,ALTER TABLE 操作可能会占用较多系统资源,影响数据库性能。

  4. 外键约束:修改或删除有外键引用的列时需要特别小心,可能需要先修改或删除相关的外键约束。

  5. 索引:添加或删除列时,相关的索引可能会自动更新或需要手动更新。

  6. 事务:在某些数据库系统中,ALTER TABLE 操作是不可回滚的。

小结

SQL ALTER TABLE 语句是修改数据库表结构的强大工具,通过它可以添加、修改、删除列,以及添加、删除约束等。在使用 ALTER TABLE 语句时,需要注意其对现有数据和系统性能的影响,特别是对于大型表的操作。在执行重要的表结构修改前,应该备份数据,以防止意外情况的发生。