CREATE TABLE 和 DROP TABLE 语句实现。以下是详细说明和示例:
一、创建表(增)
1. 基本语法
CREATE TABLE 表名 (
列名1 数据类型 [约束条件],
列名2 数据类型 [约束条件],
...
[表级约束条件]
);
2. 常用示例
-- 创建学生表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建带外键的表
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
3. 创建表时添加约束
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
dept_id INT,
salary DECIMAL(10,2) CHECK (salary > 0),
hire_date DATE DEFAULT (CURDATE()),
-- 表级约束
CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
4. 基于现有表创建新表
-- 复制表结构(不复制数据)
CREATE TABLE new_students LIKE students;
-- 复制表结构和数据
CREATE TABLE students_backup AS SELECT * FROM students;
-- 复制部分数据
CREATE TABLE students_over20 AS
SELECT * FROM students WHERE age > 20;
二、删除表(删)
1. 基本语法
DROP TABLE 表名;
2. 安全删除
-- 普通删除
DROP TABLE students;
-- 安全删除(如果表存在才删除)
DROP TABLE IF EXISTS students;
-- 删除多个表
DROP TABLE table1, table2, table3;
-- 级联删除(删除表及其依赖对象)
DROP TABLE orders CASCADE; -- PostgreSQL
3. 清空表数据(保留表结构)
-- 删除所有数据(不可回滚)
TRUNCATE TABLE students;
-- 删除所有数据(可回滚)
DELETE FROM students;
三、高级操作
1. 临时表
-- 创建临时表(会话结束时自动删除)
CREATE TEMPORARY TABLE temp_data (
id INT,
value VARCHAR(100)
);
-- 临时表插入数据
INSERT INTO temp_data VALUES (1, 'test');
2. 全局临时表(SQL Server)
CREATE TABLE ##GlobalTemp (
id INT,
data VARCHAR(50)
);
3. 分区表(MySQL)
CREATE TABLE sales (
sale_id INT,
sale_date DATE,
amount DECIMAL(10,2)
)
PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023)
);
四、注意事项
⚠️ 删除表的注意事项:
数据丢失:
DROP TABLE 会永久删除表结构和所有数据
权限要求:需要相应权限
依赖关系:有外键引用时需要先删除或使用
CASCADE
备份:重要数据应先备份
✅ 最佳实践:
-- 1. 删除前先检查
SHOW TABLES LIKE 'students';
-- 2. 使用IF EXISTS避免错误
DROP TABLE IF EXISTS old_students;
-- 3. 重要操作前备份
CREATE TABLE students_backup AS SELECT * FROM students;
-- 4. 在生产环境使用事务(如果支持)
BEGIN TRANSACTION;
DROP TABLE IF EXISTS temp_table;
COMMIT;
5. 不同数据库的差异
-- MySQL
CREATE TABLE IF NOT EXISTS table_name ...
DROP TABLE IF EXISTS table_name;
-- SQL Server
IF OBJECT_ID('table_name', 'U') IS NOT NULL
DROP TABLE table_name;
-- Oracle
DROP TABLE table_name PURGE; -- 立即释放空间
五、完整示例
-- 创建数据库
CREATE DATABASE school_db;
USE school_db;
-- 创建院系表
CREATE TABLE departments (
dept_id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL UNIQUE
);
-- 创建学生表
CREATE TABLE students (
student_id INT PRIMARY KEY AUTO_INCREMENT,
student_name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 0),
dept_id INT,
admission_date DATE DEFAULT (CURRENT_DATE),
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
-- 创建备份表
CREATE TABLE students_archive LIKE students;
-- 删除表(如果有)
DROP TABLE IF EXISTS old_students;
-- 清空测试数据
TRUNCATE TABLE test_data;
记住:删除操作不可逆,执行前务必确认和备份!