⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

SQL ALTER TABLE

学习修改表结构 · 难度:进阶 · +15XP

SQL ALTER TABLE 修改表结构

在实际开发中,数据库表的结构很少能从一开始就设计得完美无缺。随着业务需求的变化,你可能需要往现有表中添加新字段修改字段类型重命名列删除不再需要的列。SQL 的 ALTER TABLE 语句就是用来在表创建之后修改其结构的工具,是数据库模式迁移中最常用的命令之一。

添加列(ADD COLUMN)

-- 基本语法:添加单列
ALTER TABLE 表名 ADD COLUMN 列名 数据类型;

-- 添加列并设置默认值 ALTER TABLE students ADD COLUMN email TEXT DEFAULT '未填写';

-- 添加多列(MySQL 语法) ALTER TABLE students ADD COLUMN phone VARCHAR(20), ADD COLUMN address VARCHAR(100);

修改列定义(MODIFY/ALTER COLUMN)

不同数据库修改列的语法差异较大:

-- MySQL:修改列的数据类型
ALTER TABLE students MODIFY COLUMN score DECIMAL(5,2);

-- MySQL:同时修改类型和默认值 ALTER TABLE students MODIFY COLUMN status VARCHAR(10) DEFAULT 'active';

-- PostgreSQL / SQL Server ALTER TABLE students ALTER COLUMN score TYPE DECIMAL(5,2);

-- SQLite:不支持直接修改列,需要重建表

重命名列(RENAME COLUMN)

-- MySQL / MariaDB
ALTER TABLE students RENAME COLUMN name TO full_name;

-- PostgreSQL ALTER TABLE students RENAME COLUMN name TO full_name;

-- SQL Server EXEC sp_rename 'students.name', 'full_name', 'COLUMN';

删除列(DROP COLUMN)

-- 删除单列
ALTER TABLE students DROP COLUMN email;

-- MySQL 删除多列 ALTER TABLE students DROP COLUMN phone, DROP COLUMN address;

-- 注意:SQLite 不支持 DROP COLUMN(3.35.0 版本后开始支持)

添加和删除约束

-- 添加主键
ALTER TABLE students ADD PRIMARY KEY (id);

-- 添加外键 ALTER TABLE scores ADD CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES students(id);

-- 添加唯一约束 ALTER TABLE users ADD CONSTRAINT uq_email UNIQUE (email);

-- 删除约束 ALTER TABLE users DROP INDEX uq_email; -- MySQL ALTER TABLE users DROP CONSTRAINT uq_email; -- PostgreSQL

操作注意事项

  1. 备份先行:修改表结构前务必备份数据,ALTER 操作不可撤销
  2. 锁表影响:在大型生产表上执行 ALTER 可能会长时间锁表,影响业务
  3. 默认值处理:添加 NOT NULL 列时必须提供 DEFAULT 值,否则已有行的该列值为 NULL 会报错
  4. 数据类型转换:修改列类型可能造成数据截断或精度丢失
  5. SQLite 限制:SQLite 对 ALTER TABLE 支持有限,复杂修改需重建表

实战任务

  1. 向 students 表添加 email 和 phone 列
  2. 将 score 列的类型修改为 DECIMAL(5,2)
  3. 将 name 列重命名为 student_name
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0