创建表
定义
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
详细说明
创建表涉及以下几个重要方面:
-
数据类型
- 数值类型:INT, DECIMAL, FLOAT等
- 字符串类型:CHAR, VARCHAR, TEXT等
- 日期时间类型:DATE, TIME, DATETIME等
- 二进制类型:BLOB, VARBINARY等
-
约束类型
- NOT NULL:确保列不能为空
- UNIQUE:确保列值唯一
- PRIMARY KEY:主键约束
- FOREIGN KEY:外键约束
- CHECK:检查约束
- DEFAULT:默认值约束
-
特殊属性
- AUTO_INCREMENT:自动递增
- TIMESTAMP:时间戳
- ENUM:枚举类型
-
表关系
- 一对一关系
- 一对多关系
- 多对多关系
推演说明
表的设计过程体现了数据库设计的演进:
-
基础表设计
- 确定字段和数据类型
- 设置基本约束
- 定义主键
-
关系表设计
- 建立表间关系
- 设置外键约束
- 处理级联操作
-
高级表设计
- 添加索引
- 优化存储结构
- 考虑性能因素
注意事项
-
命名规范
- 使用有意义的表名和字段名
- 遵循命名约定
- 避免使用保留字
-
数据类型选择
- 选择合适的数据类型
- 考虑存储空间
- 注意精度要求
-
约束使用
- 合理使用约束
- 避免过度约束
- 考虑性能影响
-
索引设计
- 为常用查询字段创建索引
- 避免过多索引
- 考虑索引维护成本
テーブルの作成は、データベース設計の基本です。適切なデータ型の選択、制約の設定、リレーションシップの確立により、効率的で整合性のあるデータ構造を構築することができます。テーブル設計は、アプリケーションの性能と保守性に直接影響するため、慎重に行う必要があります。