MySQL 数据表基本操作全解:从创建到约束,一文吃透
在 MySQL 中,数据表的基本操作是数据库开发的基石,涵盖表的创建、约束设计、结构查看等核心内容。本文围绕图片中的知识点,从语法、代码示例、场景说明三个维度,带你彻底掌握 MySQL 表操作。
一、核心知识点总览
| 大类 | 细分知识点 | 核心作用 |
|---|---|---|
| 1. 创建数据表 | 1) 创建表语法 | 定义表结构、字段、数据类型 |
| 2) 主键约束 | 唯一标识表中每一行数据 | |
| - 单字段主键 | 单个字段作为主键 | |
| - 多字段联合主键 | 多个字段组合作为主键 | |
| 3) 外键约束 | 建立表与表之间的关联关系 | |
| 4) 非空约束 | 强制字段不能为 NULL | |
| 5) 唯一性约束 | 保证字段值不重复 | |
| 6) 默认约束 | 给字段设置默认值 | |
| 7) 自动增加 | 主键字段自动递增 | |
| 2. 查看数据表结构 | 1) DESCRIBE 语句 | 快速查看表字段、类型、约束 |
| 2) SHOW CREATE TABLE 语句 | 查看表的完整创建语句 |
二、1. 创建数据表
1.1 创建表的语法形式
基础语法
sql
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [约束条件],
字段2 数据类型 [约束条件],
...
[表级约束]
) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集];
IF NOT EXISTS:表不存在时才创建,避免报错ENGINE:常用InnoDB(支持事务、外键)CHARSET:常用utf8mb4(支持 emoji 等全字符)
1.2 使用主键约束
主键(PRIMARY KEY)是表的唯一标识 ,要求:非空、唯一、一个表只能有一个主键。
(1) 单字段主键
语法(两种写法)
sql
-- 方式1:字段级定义(推荐)
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT, -- 单字段主键
stu_name VARCHAR(20) NOT NULL,
age INT
);
-- 方式2:表级定义
CREATE TABLE student (
stu_id INT,
stu_name VARCHAR(20) NOT NULL,
age INT,
PRIMARY KEY (stu_id) -- 表级定义主键
);
(2) 多字段联合主键
多个字段组合作为主键,要求组合值唯一,常用于中间表、关联表。
sql
-- 学生课程中间表:stu_id + course_id 联合主键
CREATE TABLE student_course (
stu_id INT,
course_id INT,
score INT,
PRIMARY KEY (stu_id, course_id) -- 联合主键
);
说明:单个
stu_id可重复,单个course_id可重复,但(stu_id, course_id)组合必须唯一。
1.3 使用外键约束
外键(FOREIGN KEY)用于建立表与表的关联,保证数据的参照完整性。
要求:外键字段必须引用另一张表的主键 / 唯一键,且数据类型一致。
代码示例
sql
-- 1. 先创建父表(班级表)
CREATE TABLE class (
class_id INT PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(20) NOT NULL
);
-- 2. 创建子表(学生表),添加外键关联班级表
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(20) NOT NULL,
class_id INT,
-- 表级定义外键
FOREIGN KEY (class_id) REFERENCES class(class_id)
ON DELETE CASCADE -- 父表删除,子表同步删除
ON UPDATE CASCADE -- 父表更新,子表同步更新
);
常用级联操作:
CASCADE(同步)、SET NULL(设为 NULL)、RESTRICT(限制删除)
1.4 使用非空约束
非空约束(NOT NULL):强制字段不能为 NULL,插入时必须赋值。
sql
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(20) NOT NULL, -- 非空约束:姓名不能为空
age INT
);
说明:插入数据时,若
stu_name为 NULL,MySQL 直接报错。
1.5 使用唯一性约束
唯一性约束(UNIQUE):保证字段值不重复,允许 NULL(但最多一个 NULL)。
sql
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(20) NOT NULL,
phone VARCHAR(11) UNIQUE -- 唯一性约束:手机号不能重复
);
区别:主键 = 非空 + 唯一;唯一约束 = 唯一 + 允许 NULL(一个)
1.6 使用默认约束
默认约束(DEFAULT):给字段设置默认值,插入时不赋值则自动填充。
sql
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(20) NOT NULL,
age INT DEFAULT 18, -- 默认约束:默认年龄18
gender VARCHAR(5) DEFAULT '男'
);
示例:插入
INSERT INTO student(stu_name) VALUES ('张三');,age自动为 18,gender自动为男。
1.7 设置表的属性值自动增加
自动增加(AUTO_INCREMENT):仅用于整数类型的主键,插入时自动递增,无需手动赋值。
sql
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT, -- 自动递增
stu_name VARCHAR(20) NOT NULL
);
说明:插入
INSERT INTO student(stu_name) VALUES ('张三'),('李四');,stu_id自动为 1、2。
三、2. 查看数据表结构
2.1 查看表基本结构:DESCRIBE / DESC
快速查看表的字段、数据类型、是否为空、主键、默认值等信息。
语法
sql
DESCRIBE 表名;
-- 简写
DESC 表名;
代码示例
sql
DESC student;
运行结果
表格
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| stu_id | int | NO | PRI | NULL | auto_increment |
| stu_name | varchar(20) | NO | NULL | ||
| age | int | YES | 18 | ||
| gender | varchar(5) | YES | 男 |
字段说明:
Key:PRI= 主键,UNI= 唯一键,MUL= 普通索引 / 外键Extra:auto_increment= 自动递增
2.2 查看表详细结构:SHOW CREATE TABLE
查看表的完整创建语句,包含所有约束、存储引擎、字符集等。
语法
sql
SHOW CREATE TABLE 表名;
代码示例
sql
SHOW CREATE TABLE student;
运行示例
sql
CREATE TABLE `student` (
`stu_id` int NOT NULL AUTO_INCREMENT,
`stu_name` varchar(20) NOT NULL,
`age` int DEFAULT '18',
`gender` varchar(5) DEFAULT '男',
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
说明:完整还原表的创建语句,可用于备份、迁移表结构。
四、综合实战:完整表创建示例
sql
-- 1. 创建班级表(父表)
CREATE TABLE IF NOT EXISTS class (
class_id INT PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(20) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. 创建学生表(子表,含所有约束)
CREATE TABLE IF NOT EXISTS student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(20) NOT NULL,
phone VARCHAR(11) UNIQUE,
age INT DEFAULT 18,
class_id INT,
FOREIGN KEY (class_id) REFERENCES class(class_id)
ON DELETE SET NULL
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 3. 查看表结构
DESC student;
SHOW CREATE TABLE student;
五、核心注意事项(避坑指南)
- 主键规则:一个表只能有一个主键,主键必须非空、唯一
- 外键要求:外键必须引用父表的主键 / 唯一键,数据类型必须一致
- AUTO_INCREMENT:仅用于整数主键,一个表只能有一个自增字段
- 唯一约束 vs 主键:唯一约束允许 NULL,主键不允许
- 默认约束:默认值必须与字段数据类型一致
- 存储引擎 :外键仅支持
InnoDB,MyISAM不支持外键
六、核心总结
- 创建表核心 :
CREATE TABLE+ 字段定义 + 约束设计 - 五大核心约束 :
- 主键(PRIMARY KEY):唯一标识
- 外键(FOREIGN KEY):表间关联
- 非空(NOT NULL):强制赋值
- 唯一(UNIQUE):值不重复
- 默认(DEFAULT):自动填充
- 查看表结构 :
DESC快速看字段,SHOW CREATE TABLE看完整语句 - 自增(AUTO_INCREMENT):主键自动递增,简化插入