宿州市文章资讯

如何在SQL中实现表的增删

2026-03-25 14:21:02 浏览次数:2
详细信息

CREATE TABLEDROP 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;

记住:删除操作不可逆,执行前务必确认和备份!

相关推荐