Appearance
11.2 数据库、表、字段、记录
数据库的基本结构
关系型数据库使用层次化的结构来组织数据,从高到低依次是:数据库 → 表 → 记录 → 字段。
数据库(Database)
数据库是存储相关表的容器,一个数据库可以包含多个表。
数据库的作用
- 组织数据:将相关的数据集中存储
- 隔离数据:不同应用的数据可以存储在不同的数据库中
- 管理权限:可以为不同的用户设置不同的数据库权限
数据库的命名规则
- 只能包含字母、数字、下划线
- 不能以数字开头
- 长度不超过64个字符
- 区分大小写(取决于操作系统)
常用的数据库操作
- 创建数据库:`CREATE DATABASE database_name;
- 删除数据库:`DROP DATABASE database_name;
- 选择数据库:`USE database_name;
表(Table)
表是存储数据的基本单位,由行和列组成。
表的结构
- 列(Column):表中的字段,如用户名、密码、邮箱等
- 行(Row):表中的记录,包含一条完整的数据
- 表头:表的第一行,显示列名
表的命名规则
- 只能包含字母、数字、下划线
- 不能以数字开头
- 长度不超过64个字符
- 应该使用有意义的名称
常用的表操作
- 创建表:`CREATE TABLE table_name (columns);
- 删除表:`DROP TABLE table_name;
- 修改表:`ALTER TABLE table_name;
字段(Column)
字段是表中的列,定义了数据的类型和属性。
字段的属性
- 字段名:字段的名称
- 数据类型:字段存储的数据类型,如 INT、VARCHAR、DATE 等
- 长度:字段的最大长度
- 约束:如 NOT NULL、PRIMARY KEY、UNIQUE 等
- 默认值:字段的默认值
常用的数据类型
| 数据类型 | 描述 | 示例 |
|---|---|---|
| INT | 整数 | 1, 100, -50 |
| VARCHAR | 可变长度字符串 | "John", "Hello World" |
| TEXT | 长文本 | 文章内容 |
| DATE | 日期 | "2023-12-25" |
| DATETIME | 日期和时间 | "2023-12-25 10:30:00" |
| DECIMAL | 小数 | 3.14, 100.50 |
| BOOLEAN | 布尔值 | TRUE, FALSE |
常用的字段约束
- NOT NULL:字段不能为空
- PRIMARY KEY:主键,唯一标识记录
- UNIQUE:值必须唯一
- DEFAULT:默认值
- FOREIGN KEY:外键,引用其他表的主键
记录(Row)
记录是表中的一行数据,包含了所有字段的值。
记录的特点
- 完整性:每条记录包含表中所有字段的值
- 唯一性:通过主键保证记录的唯一性
- 关联性:通过外键与其他表的记录建立关联
常用的记录操作
- 插入记录:`INSERT INTO table_name VALUES (values);
- 更新记录:`UPDATE table_name SET column=value WHERE condition;
- 删除记录:`DELETE FROM table_name WHERE condition;
- 查询记录:`SELECT * FROM table_name WHERE condition;
示例:用户表结构
创建用户表
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
age INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);表结构说明
- id:主键,自增整数
- username:用户名,不能为空且唯一
- email:邮箱,不能为空且唯一
- password:密码,不能为空
- age:年龄,默认为0
- created_at:创建时间,默认为当前时间戳
插入记录
sql
INSERT INTO users (username, email, password, age) VALUES
('admin', 'admin@example.com', 'password123', 25),
('user1', 'user1@example.com', 'password456', 30),
('user2', 'user2@example.com', 'password789', 22);查询记录
sql
SELECT * FROM users;| id | username | password | age | created_at | |
|---|---|---|---|---|---|
| 1 | admin | admin@example.com | password123 | 25 | 2023-12-25 10:00:00 |
| 2 | user1 | user1@example.com | password456 | 30 | 2023-12-25 10:00:00 |
| 3 | user2 | user2@example.com | password789 | 22 | 2023-12-25 10:00:00 |
数据库设计原则
- 范式化:遵循数据库设计范式,减少数据冗余
- 完整性:确保数据的完整性和一致性
- 性能:考虑查询性能,合理设计索引
- 可扩展性:设计灵活,易于扩展
- 安全性:保护数据安全,设置适当的权限
练习
- 设计一个学生表,包含学号、姓名、性别、年龄、班级等字段
- 设计一个课程表,包含课程ID、课程名称、学分、教师等字段
- 设计一个成绩表,关联学生表和课程表
- 插入一些测试数据并进行查询操作
