跳转至

创建表

定义

CREATE TABLE是SQL中的数据定义语言(DDL)语句,用于在数据库中创建新的表。表是关系型数据库中存储数据的基本单位,由行(记录)和列(字段)组成。

作用

创建表是数据库设计的基础,它提供了以下优势:

  • 结构化数据存储:将数据组织成行和列的形式
  • 数据完整性保证:通过约束确保数据的正确性
  • 数据关系管理:通过主键和外键建立表之间的关系
  • 数据访问控制:可以针对表级别设置访问权限
  • 数据查询优化:通过合理的表结构提高查询效率

例子

-- 创建用户表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    full_name VARCHAR(100) NOT NULL,
    phone VARCHAR(20),
    birth_date DATE,
    gender ENUM('Male', 'Female', 'Other'),
    status ENUM('Active', 'Inactive', 'Suspended') DEFAULT 'Active',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 创建学生表
CREATE TABLE students (
    student_id VARCHAR(20) PRIMARY KEY,
    user_id INT UNIQUE,
    grade INT NOT NULL CHECK (grade BETWEEN 1 AND 12),
    class_name VARCHAR(50),
    enrollment_date DATE NOT NULL,
    graduation_date DATE,
    gpa DECIMAL(3,2) CHECK (gpa BETWEEN 0.00 AND 4.00),
    credits_earned INT DEFAULT 0,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- 创建课程表
CREATE TABLE courses (
    course_id VARCHAR(10) PRIMARY KEY,
    course_name VARCHAR(100) NOT NULL,
    description TEXT,
    credits INT NOT NULL CHECK (credits > 0),
    department VARCHAR(50) NOT NULL,
    prerequisite VARCHAR(10),
    max_students INT DEFAULT 30,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (prerequisite) REFERENCES courses(course_id)
);

图表说明

flowchart TD
    subgraph 数据库表结构
        subgraph 数据类型
            num[数值类型]
            str[字符串类型]
            date[日期时间类型]
            bin[二进制类型]
        end

        subgraph 约束类型
            notnull[NOT NULL]
            unique[UNIQUE]
            pk[PRIMARY KEY]
            fk[FOREIGN KEY]
            check[CHECK]
            def[DEFAULT]
        end

        subgraph 特殊属性
            auto[AUTO_INCREMENT]
            time[TIMESTAMP]
            enum[ENUM]
        end

        subgraph 表关系
            one2one[一对一]
            one2many[一对多]
            many2many[多对多]
        end
    end

    num --> str
    str --> date
    date --> bin

    notnull --> unique
    unique --> pk
    pk --> fk
    fk --> check
    check --> def

    auto --> time
    time --> enum

    one2one --> one2many
    one2many --> many2many

详细说明

创建表涉及以下几个重要方面:

  1. 数据类型

    • 数值类型:INT, DECIMAL, FLOAT等
    • 字符串类型:CHAR, VARCHAR, TEXT等
    • 日期时间类型:DATE, TIME, DATETIME等
    • 二进制类型:BLOB, VARBINARY等
  2. 约束类型

    • NOT NULL:确保列不能为空
    • UNIQUE:确保列值唯一
    • PRIMARY KEY:主键约束
    • FOREIGN KEY:外键约束
    • CHECK:检查约束
    • DEFAULT:默认值约束
  3. 特殊属性

    • AUTO_INCREMENT:自动递增
    • TIMESTAMP:时间戳
    • ENUM:枚举类型
  4. 表关系

    • 一对一关系
    • 一对多关系
    • 多对多关系

推演说明

表的设计过程体现了数据库设计的演进:

  1. 基础表设计

    • 确定字段和数据类型
    • 设置基本约束
    • 定义主键
  2. 关系表设计

    • 建立表间关系
    • 设置外键约束
    • 处理级联操作
  3. 高级表设计

    • 添加索引
    • 优化存储结构
    • 考虑性能因素

注意事项

  1. 命名规范

    • 使用有意义的表名和字段名
    • 遵循命名约定
    • 避免使用保留字
  2. 数据类型选择

    • 选择合适的数据类型
    • 考虑存储空间
    • 注意精度要求
  3. 约束使用

    • 合理使用约束
    • 避免过度约束
    • 考虑性能影响
  4. 索引设计

    • 为常用查询字段创建索引
    • 避免过多索引
    • 考虑索引维护成本

    テーブルの作成は、データベース設計の基本です。適切なデータ型の選択、制約の設定、リレーションシップの確立により、効率的で整合性のあるデータ構造を構築することができます。テーブル設計は、アプリケーションの性能と保守性に直接影響するため、慎重に行う必要があります。