Skip to content

DDL 基础:CREATE、ALTER、DROP ​

CREATE TABLE ​

基本语法 ​

sql
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    age INT CHECK (age >= 0),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

从查询创建表 ​

sql
CREATE TABLE active_users AS
SELECT * FROM users WHERE status = 'active';

临时表 ​

sql
-- PostgreSQL / MySQL
CREATE TEMP TABLE temp_data (
    id INT,
    value TEXT
);
-- 会话结束时自动删除

ALTER TABLE ​

添加列 ​

sql
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';

删除列 ​

sql
ALTER TABLE users DROP COLUMN phone;

修改列 ​

sql
-- PostgreSQL
ALTER TABLE users ALTER COLUMN email TYPE VARCHAR(300);
ALTER TABLE users ALTER COLUMN age SET NOT NULL;

-- MySQL
ALTER TABLE users MODIFY COLUMN email VARCHAR(300);
ALTER TABLE users MODIFY COLUMN age INT NOT NULL;

重命名 ​

sql
-- 重命名列
ALTER TABLE users RENAME COLUMN name TO full_name;

-- 重命名表
ALTER TABLE users RENAME TO customers;

DROP TABLE ​

sql
DROP TABLE users;

-- 如果存在则删除
DROP TABLE IF EXISTS users;

-- 级联删除(删除依赖对象)
DROP TABLE users CASCADE;

实践建议 ​

  1. 始终使用 IF EXISTS / IF NOT EXISTS
  2. 生产环境谨慎使用 DROP
  3. 先备份再修改
  4. 使用事务包装 DDL(PostgreSQL)
sql
BEGIN;
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- 验证
ROLLBACK;  -- 或 COMMIT

练习 ​

  1. 创建 products 表(id, name, price, stock)
  2. 添加 description 列
  3. 修改 price 为 DECIMAL(10,2)
  4. 重命名列和表
  5. 删除列
  6. 创建临时表
  7. 从查询创建表
  8. 练习 IF EXISTS / IF NOT EXISTS

完成练习后,打开本章答案页核对。

下一步 ​

下一节学习数据类型:如何选择合适的数据类型。

回到第七章概览 · 返回SQL 学习路线

用心记录每一步成长