【MySQL建表语句深度解析】:揭秘表结构设计奥秘
发布时间: 2024-07-24 07:28:23 阅读量: 25 订阅数: 33
![数据库sql建表语句](https://img-blog.csdnimg.cn/direct/4d81cc433b444545ac13d079d4052e77.png)
# 1. MySQL建表语句基础**
MySQL中的建表语句用于创建数据库表,它由以下几个部分组成:
* **CREATE TABLE**:声明要创建的表名。
* **列定义**:指定表的列名、数据类型和约束。
* **主键定义**:指定表的唯一标识列。
例如,以下语句创建一个名为 `users` 的表,其中包含 `id`、`name` 和 `email` 列:
```sql
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
PRIMARY KEY (id)
);
```
# 2. 数据类型与约束
### 2.1 数据类型详解
MySQL提供了丰富的数据类型,以满足不同数据的存储需求。数据类型决定了数据的表示方式、存储空间和操作特性。
#### 2.1.1 数值类型
| 数据类型 | 描述 | 取值范围 | 精度 | 存储空间 |
|---|---|---|---|---|
| TINYINT | 有符号小整数 | -128 ~ 127 | 1 字节 | 1 字节 |
| SMALLINT | 有符号整数 | -32768 ~ 32767 | 2 字节 | 2 字节 |
| MEDIUMINT | 有符号整数 | -8388608 ~ 8388607 | 3 字节 | 3 字节 |
| INT | 有符号整数 | -2147483648 ~ 2147483647 | 4 字节 | 4 字节 |
| BIGINT | 有符号整数 | -9223372036854775808 ~ 9223372036854775807 | 8 字节 | 8 字节 |
| FLOAT | 浮点数 | 3.4028234663852886e+38 ~ 1.1754943508222875e-38 | 4 字节 | 4 字节 |
| DOUBLE | 浮点数 | 1.7976931348623157e+308 ~ 2.2250738585072014e-308 | 8 字节 | 8 字节 |
| DECIMAL | 定点数 | 根据精度和范围确定 | 可指定 | 根据精度和范围确定 |
#### 2.1.2 字符串类型
| 数据类型 | 描述 | 最大长度 | 存储空间 |
|---|---|---|---|
| CHAR | 定长字符串 | 固定长度 | 固定长度 |
| VARCHAR | 可变长字符串 | 可变长度,最大 65535 字节 | 根据长度动态分配 |
| TEXT | 长文本 | 最大 65535 字节 | 根据长度动态分配 |
| BLOB | 二进制大对象 | 最大 16MB | 根据长度动态分配 |
#### 2.1.3 日期时间类型
| 数据类型 | 描述 | 取值范围 | 存储空间 |
|---|---|---|---|
| DATE | 日期 | 1000-01-01 ~ 9999-12-31 | 3 字节 |
| TIME | 时间 | 00:00:00 ~ 23:59:59 | 3 字节 |
| DATETIME | 日期时间 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 字节 |
| TIMESTAMP | 时间戳 | 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 | 4 字节 |
#### 2.1.4 其他类型
| 数据类型 | 描述 | 存储空间 |
|---|---|---|
| ENUM | 枚举类型 | 根据枚举值数量确定 |
| SET | 集合类型 | 根据集合值数量确定 |
| JSON | JSON 数据 | 根据 JSON 数据大小确定 |
### 2.2 约束与索引
约束和索引是 MySQL 中重要的概念,它们有助于维护数据的完整性和提高查询性能。
#### 2.2.1 主键约束
主键约束指定表中唯一标识每行的列。主键列不能为 NULL,并且必须具有唯一值。
```sql
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
```
#### 2.2.2 外键约束
外键约束指定表中的一列引用另一表中的主键列。这可以确保数据的完整性,防止出现无效的引用。
```sql
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users (id)
);
```
#### 2.2.3 唯一约束
唯一约束指定表中的一列或多列必须具有唯一值。这可以防止重复数据的插入。
```sql
CREATE TABLE products (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
UNIQUE (name)
);
```
#### 2.2.4 索引类型
索引是数据结构,用于加速对表的查询。MySQL 支持多种索引类型,包括:
- **B-Tree 索引:**一种平衡树索引,用于快速查找数据。
- **哈希索引:**一种哈希表索引,用于快速查找相等值。
- **全文索引:**一种用于全文搜索的特殊索引。
```sql
CREATE TABLE posts (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT,
INDEX (title)
);
```
# 3. 表结构设计实践**
### 3.1 范式化原则
范式化是数
0
0