Mysql 08: 数据表基本操作——从创建到约束

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

字段说明:

  • KeyPRI= 主键,UNI= 唯一键,MUL= 普通索引 / 外键
  • Extraauto_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;

五、核心注意事项(避坑指南)

  1. 主键规则:一个表只能有一个主键,主键必须非空、唯一
  2. 外键要求:外键必须引用父表的主键 / 唯一键,数据类型必须一致
  3. AUTO_INCREMENT:仅用于整数主键,一个表只能有一个自增字段
  4. 唯一约束 vs 主键:唯一约束允许 NULL,主键不允许
  5. 默认约束:默认值必须与字段数据类型一致
  6. 存储引擎 :外键仅支持 InnoDBMyISAM 不支持外键

六、核心总结

  1. 创建表核心CREATE TABLE + 字段定义 + 约束设计
  2. 五大核心约束
    • 主键(PRIMARY KEY):唯一标识
    • 外键(FOREIGN KEY):表间关联
    • 非空(NOT NULL):强制赋值
    • 唯一(UNIQUE):值不重复
    • 默认(DEFAULT):自动填充
  3. 查看表结构DESC 快速看字段,SHOW CREATE TABLE 看完整语句
  4. 自增(AUTO_INCREMENT):主键自动递增,简化插入
相关推荐
Mr. zhihao12 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
m0_7488394912 小时前
利用天正暖通CAD快速掌握风管数量统计的方法
数据库
随身数智备忘录12 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
海市公约12 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love13 小时前
MySQL的执行流程
android·数据库·mysql
海市公约13 小时前
一条SQL查询的完整旅程:MySQL执行流程深度解析
sql·mysql·数据库优化·执行计划·连接器·查询缓存·sql执行原理
程序leo源13 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
这个DBA有点耶13 小时前
COUNT进阶:超大表的近似计数与HyperLogLog
数据库·sql·程序人生·学习方法·dba·改行学it
武子康13 小时前
调查研究-138 全球机器人产业深度调研报告【01 篇】:市场规模、竞争格局与商业化成熟 2026
服务器·数据库·ai·chatgpt·机器人·具身智能
zhojiew14 小时前
在本地PostgreSQL使用pgvector构建生成式 AI 应用的实践
数据库·人工智能·postgresql