一、前言
在上一篇中,我们已经完成了MySQL的环境搭建、基础配置和客户端连接,成功搭建好了学习和实战的"基础设施",能够正常连接数据库并执行简单的测试命令。
本篇作为系列第二篇,将进入MySQL最核心、最常用的基础操作------CRUD实战。CRUD分别对应"创建(Create)、查询(Read)、修改(Update)、删除(Delete)",这四个动作是数据库操作的基石,也是90%以上业务开发(如用户注册、订单管理、数据统计)的核心逻辑,更是后端开发、测试、DBA等岗位必须熟练掌握的基本功。
本文将从"数据库操作→数据表操作→数据CRUD操作"逐步展开,结合实操案例、避坑提示,全程使用上一篇创建的test_db测试库,确保零基础学习者能跟着操作、落地生效,同时规避新手最容易踩的"误删数据""全表修改"等坑。
二、数据库(Database)核心操作
数据库是数据表的容器,先有数据库,才能创建数据表、存储数据。在上一篇中,我们已经初步使用过创建数据库的命令,本篇将详细讲解数据库的"增、查、删、切"四大核心操作,覆盖日常开发中所有数据库相关场景。
提示:所有操作均在MySQL客户端(命令行或图形化工具)中执行,执行前需确保已连接MySQL,且命令结尾必须加分号(;),否则命令不会执行。
2.1 创建数据库(Create)
核心需求:创建一个新的数据库,用于存储特定业务的数据(如用户库、订单库)。
1. 基本语法
bash
-- 基础语法(若数据库已存在,会报错)
CREATE DATABASE 数据库名;
-- 推荐语法(IF NOT EXISTS:若数据库不存在则创建,避免报错,新手必用)
CREATE DATABASE IF NOT EXISTS 数据库名;
2. 实操案例
bash
-- 案例1:创建名为mydb的数据库(推荐写法)
CREATE DATABASE IF NOT EXISTS mydb;
-- 案例2:创建名为user_db的数据库(用于存储用户相关数据)
CREATE DATABASE IF NOT EXISTS user_db;
3. 避坑提示
-
数据库名不能包含特殊字符(如@、#、空格),建议使用小写字母+下划线(如user_db),避免与MySQL关键字(如SELECT、DATABASE)重名;
-
新手建议始终使用"IF NOT EXISTS",避免因重复创建数据库导致报错,影响操作节奏。
2.2 查看数据库(Read)
核心需求:查看当前MySQL中所有已创建的数据库,确认数据库是否创建成功。
1. 基本语法
bash
-- 查看所有数据库
SHOW DATABASES;
2. 实操案例
bash
-- 查看所有数据库,确认mydb、user_db是否创建成功
SHOW DATABASES;
执行结果说明:会显示MySQL默认数据库(如information_schema、mysql、sys)和我们创建的mydb、user_db,若能看到目标数据库,说明创建成功。
2.3 切换/使用数据库(核心操作)
核心需求:后续操作(创建表、操作数据)都需要针对某个具体的数据库,因此必须先"切换"到目标数据库,相当于"进入某个文件夹"。
1. 基本语法
bash
USE 数据库名;
2. 实操案例
bash
-- 切换到mydb数据库,后续操作均针对该数据库
USE mydb;
-- 验证是否切换成功(查看当前使用的数据库)
SELECT DATABASE();
执行结果说明:若SELECT DATABASE()返回"mydb",说明切换成功;若提示"Unknown database 'xxx'",说明数据库不存在,需重新检查数据库名。
2.4 删除数据库(Delete)
核心需求:删除无用的数据库(谨慎操作!删除后数据库内所有数据、表都会被彻底删除,无法恢复)。
1. 基本语法
bash
-- 基础语法(若数据库不存在,会报错)
DROP DATABASE 数据库名;
-- 推荐语法(IF EXISTS:若数据库存在则删除,避免报错)
DROP DATABASE IF EXISTS 数据库名;
2. 实操案例
bash
-- 案例:删除名为user_db的数据库(谨慎执行!)
DROP DATABASE IF EXISTS user_db;
-- 验证是否删除成功
SHOW DATABASES;
3. 避坑重点(重中之重)
⚠️ 警告:删除数据库是高危操作,一旦执行,数据库内所有数据、表会被彻底删除,无默认恢复机制!
-
学习阶段:删除数据库前,确认该数据库无重要数据,建议先执行SHOW DATABASES确认数据库名,避免误删;
-
生产环境:严禁随意执行DROP DATABASE命令,如需删除,需先备份数据,且经过审批后再操作。
三、数据表(Table)核心操作
数据表是存储数据的载体,相当于"数据库这个文件夹里的表格",每个表对应一种业务实体(如用户表、订单表),表内包含多个字段(如用户表的姓名、年龄、手机号)。
本节将讲解数据表的"增、查、改、删",重点是"创建表"(最核心)和"修改表",删除表同样需谨慎操作。
提示:所有表操作必须先执行USE 数据库名,切换到目标数据库后再执行。本节均以mydb数据库为例。
3.1 创建数据表(Create,核心)
创建表是最核心的表操作,需要定义表名、字段名、字段类型、字段约束(如主键、非空),字段的设计直接影响后续数据存储和查询效率。
1. 基本语法
bash
CREATE TABLE IF NOT EXISTS 表名 (
字段名1 字段类型 字段约束,
字段名2 字段类型 字段约束,
字段名3 字段类型 字段约束,
...
字段名n 字段类型 字段约束
);
2. 核心概念(新手必懂)
-
字段类型:规定该字段能存储的数据类型(如INT存储整数、VARCHAR存储字符串、DATE存储日期),后续会重点讲解常用类型;
-
字段约束:对字段的限制(如主键约束、非空约束、唯一约束),确保数据的合法性和完整性;
-
主键(PRIMARY KEY):表的唯一标识,每个表必须有一个主键,主键字段的值不能重复、不能为NULL(如用户表的id字段)。
3. 常用字段类型(新手必记)
| 字段类型 | 说明 | 示例 |
|---|---|---|
| INT | 整数类型(可存储正数、负数、0),适合存储年龄、ID等 | age INT(存储年龄) |
| VARCHAR(n) | 字符串类型,n表示最大长度(0-65535),适合存储姓名、手机号等 | name VARCHAR(20)(姓名最长20个字符) |
| DATE | 日期类型(格式:YYYY-MM-DD),适合存储生日、注册日期等 | birthday DATE |
| DATETIME | 日期时间类型(格式:YYYY-MM-DD HH:MM:SS),适合存储创建时间、更新时间等 | create_time DATETIME |
4. 常用字段约束(新手必记)
-
PRIMARY KEY:主键约束,唯一标识一条数据,不能重复、不能为NULL;
-
AUTO_INCREMENT:自增约束,仅用于INT类型,插入数据时无需手动输入,自动生成递增的数值(如id自增,从1开始,每次+1);
-
NOT NULL:非空约束,该字段不能为NULL(必须填写数据);
-
UNIQUE:唯一约束,该字段的值不能重复(如手机号、邮箱)。
5. 实操案例(核心重点)
创建一个用户表(user),包含id(主键自增)、name(姓名,非空)、age(年龄)、phone(手机号,唯一)、birthday(生日),贴合真实业务场景:
bash
-- 切换到mydb数据库
USE mydb;
-- 创建user表(推荐写法,IF NOT EXISTS避免重复创建)
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增,唯一标识用户
name VARCHAR(20) NOT NULL, -- 姓名,非空(必须填写)
age INT, -- 年龄,可空(可选填写)
phone VARCHAR(11) UNIQUE, -- 手机号,唯一(不能重复)
birthday DATE -- 生日,可空
);
执行说明:若提示"Query OK, 0 rows affected",说明表创建成功;若提示"Table 'user' already exists",说明表已存在,可忽略或删除后重新创建。
3.2 查看数据表(Read)
核心需求:查看数据库内所有表、查看表结构(确认字段名、类型、约束),验证表是否创建成功。
1. 查看数据库内所有表
bash
-- 切换到mydb数据库
USE mydb;
-- 查看所有表
SHOW TABLES;
执行结果:会显示mydb数据库内所有表(如user表),若能看到目标表,说明表创建成功。
2. 查看表结构(核心)
查看表的字段名、字段类型、约束,确认表结构是否符合预期,是后续操作数据的前提。
bash
-- 语法1(推荐,简洁明了)
DESC 表名;
-- 语法2(详细显示表结构)
DESCRIBE 表名;
-- 实操案例:查看user表结构
DESC user;
执行结果说明:会显示字段名、类型、是否允许为NULL、默认值、约束等信息,可对照创建表时的定义,确认是否一致。
3. 修改数据表(Update)
核心需求:表创建后,若字段设计不合理(如字段类型错误、缺少字段、多余字段),需要修改表结构,常用操作包括"添加字段、删除字段、修改字段类型/约束"。
1. 添加字段(最常用)
bash
-- 基本语法:ALTER TABLE 表名 ADD 字段名 字段类型 字段约束;
-- 实操案例:给user表添加email字段(字符串类型,唯一,可空)
ALTER TABLE user ADD email VARCHAR(50) UNIQUE;
2. 删除字段
bash
-- 基本语法:ALTER TABLE 表名 DROP COLUMN 字段名;
-- 实操案例:删除user表的email字段
ALTER TABLE user DROP COLUMN email;
3. 修改字段类型/约束
bash
-- 基本语法:ALTER TABLE 表名 MODIFY 字段名 新字段类型 新约束;
-- 实操案例:将user表的age字段改为非空约束
ALTER TABLE user MODIFY age INT NOT NULL;
4. 避坑提示
-
修改表结构时,若表内已有数据,需注意字段类型转换的兼容性(如INT不能直接改为VARCHAR,可能导致数据丢失);
-
删除字段时,该字段内所有数据会被一并删除,需谨慎操作。
3.3 删除数据表(Delete)
核心需求:删除无用的数据表(谨慎操作!删除后表内所有数据会被彻底删除,无法恢复)。
1. 基本语法
bash
-- 基础语法(若表不存在,会报错)
DROP TABLE 表名;
-- 推荐语法(IF EXISTS:若表存在则删除,避免报错)
DROP TABLE IF EXISTS 表名;
2. 实操案例
bash
-- 案例:删除名为test_table的表(谨慎执行!)
DROP TABLE IF EXISTS test_table;
-- 验证是否删除成功
SHOW TABLES;
3. 避坑重点
⚠️ 警告:删除数据表是高危操作,删除后表内所有数据会被彻底删除,无默认恢复机制!
学习阶段:删除表前,确认表内无重要数据;生产环境:删除表前必须备份数据,且经过审批。
四、数据增删改查(CRUD,核心中的核心)
数据表创建完成后,核心操作就是对"数据"进行CRUD,这是日常开发中使用频率最高的操作,本节将结合user表,详细讲解每一步操作,重点规避新手最容易踩的坑。
提示:所有数据操作必须先执行USE 数据库名、确认表存在后,再执行;本节均以mydb数据库的user表为例。
4.1 新增数据(Create)
核心需求:向数据表中插入一条或多条数据,是业务开发中"新增记录"(如用户注册、新增订单)的核心操作。
1. 单条插入(最常用)
bash
-- 基本语法:INSERT INTO 表名(字段1, 字段2, ...) VALUES(值1, 值2, ...);
-- 实操案例:向user表插入一条用户数据(id自增,无需手动输入)
INSERT INTO user(name, age, phone, birthday)
VALUES('张三', 20, '13800138000', '2004-01-01');
2. 批量插入(高效)
当需要插入多条数据时,批量插入比单条插入更高效,避免多次执行INSERT命令。
bash
-- 基本语法:INSERT INTO 表名(字段1, 字段2, ...) VALUES(值1, 值2, ...), (值1, 值2, ...);
-- 实操案例:向user表批量插入2条用户数据
INSERT INTO user(name, age, phone, birthday)
VALUES('李四', 21, '13900139000', '2003-02-02'),
('王五', 22, '13700137000', '2002-03-03');
3. 避坑提示
-
字段与值的数量、顺序必须一致(如name对应'张三',age对应20),否则会报错;
-
非空字段(如name)必须填写值,不能为NULL,否则会报错;
-
唯一约束字段(如phone)的值不能重复,否则会报错;
-
日期类型的值需符合格式(YYYY-MM-DD),否则会插入失败。
4.2 查询数据(Read,最常用)
核心需求:从数据表中查询所需数据(如查询所有用户、查询指定条件的用户),是业务开发中"查看数据"(如查看用户信息、查询订单列表)的核心操作。
1. 查询所有数据(基础)
bash
-- 基本语法:SELECT * FROM 表名;(*表示查询所有字段)
-- 实操案例:查询user表所有用户数据
SELECT * FROM user;
执行结果:会显示user表内所有用户的所有字段数据(id、name、age、phone、birthday)。
2. 查询指定字段(推荐)
实际开发中,不需要查询所有字段,只查询所需字段(如只查询姓名和年龄),可提升查询效率。
bash
-- 基本语法:SELECT 字段1, 字段2, ... FROM 表名;
-- 实操案例:查询user表中所有用户的姓名和年龄
SELECT name, age FROM user;
3. 条件查询(核心)
根据指定条件查询数据(如查询年龄大于20的用户、查询姓名为张三的用户),是最常用的查询场景。
bash
-- 基本语法:SELECT 字段 FROM 表名 WHERE 条件;
-- 实操案例1:查询姓名为张三的用户(精确匹配)
SELECT * FROM user WHERE name='张三';
-- 实操案例2:查询年龄大于20的用户
SELECT name, age FROM user WHERE age>20;
-- 实操案例3:查询手机号为13900139000的用户
SELECT * FROM user WHERE phone='13900139000';
4. 避坑提示
-
字符串条件(如name、phone)必须加单引号(''),否则会报错;
-
SELECT * 虽然便捷,但查询效率低,实际开发中尽量指定所需字段。
4.3 修改数据(Update)
核心需求:修改表中已存在的数据(如修改用户年龄、修改手机号),是业务开发中"更新记录"(如用户修改个人信息)的核心操作。
1. 基本语法
bash
-- 基本语法:UPDATE 表名 SET 字段1=值1, 字段2=值2, ... WHERE 条件;
-- 实操案例1:将张三的年龄改为22
UPDATE user SET age=22 WHERE name='张三';
-- 实操案例2:将王五的手机号改为13600136000,生日改为2002-04-04
UPDATE user SET phone='13600136000', birthday='2002-04-04' WHERE name='王五';
2. 避坑重点(重中之重)
⚠️ 警告:修改数据时,必须加WHERE条件,否则会修改表内所有数据,造成严重后果!
bash
-- 错误示例(严禁执行!会将user表所有用户的年龄改为25)
UPDATE user SET age=25;
-- 正确示例(加WHERE条件,只修改指定用户)
UPDATE user SET age=25 WHERE id=1;
补充:使用id作为WHERE条件(如WHERE id=1)是最安全的,因为id是主键,唯一标识一条数据,不会误改其他数据。
4.4 删除数据(Delete)
核心需求:删除表中不需要的数据(如删除无效用户、删除过期订单),是业务开发中"删除记录"的核心操作。
1. 基本语法
bash
-- 基本语法:DELETE FROM 表名 WHERE 条件;
-- 实操案例:删除姓名为王五的用户
DELETE FROM user WHERE name='王五';
2. 避坑重点(重中之重)
⚠️ 警告:删除数据时,必须加WHERE条件,否则会清空表内所有数据,无法恢复!
bash
-- 错误示例(严禁执行!会清空user表所有数据)
DELETE FROM user;
-- 正确示例(加WHERE条件,只删除指定用户)
DELETE FROM user WHERE id=3;
补充:清空表的另一种方式(TRUNCATE),但TRUNCATE会删除表内所有数据,且无法恢复,比DELETE更彻底,新手慎用:
bash
-- 清空user表所有数据(慎用!无法恢复)
TRUNCATE TABLE user;
五、本篇总结
本篇作为系列第二篇,核心围绕MySQL最基础、最常用的CRUD操作展开,重点掌握以下内容,确保能独立完成单表业务开发:
-
数据库操作:掌握"创建、查看、切换、删除"四大操作,重点记住"IF NOT EXISTS"避坑,删除数据库需谨慎;
-
数据表操作:核心是"创建表",掌握字段类型、字段约束的常用用法,能根据业务需求设计简单的表结构,同时掌握添加、删除、修改字段的方法;
-
数据CRUD操作:这是本篇的核心,重点掌握:
-
新增:单条插入、批量插入,注意字段与值的匹配、非空和唯一约束;
-
查询:查询所有、查询指定字段、条件查询,避免使用SELECT *;
-
修改:必须加WHERE条件,优先使用id作为条件,避免误改全表;
-
删除:必须加WHERE条件,严禁无条件删除,区分DELETE和TRUNCATE的区别。
-
至此,你已经掌握了MySQL的核心基础操作,能够独立完成"数据库→数据表→数据"的全流程操作,这是后续学习进阶查询、索引、事务等知识点的基础,也是日常开发中最常用的核心技能。
六、下一篇预告
下一篇我们将进入MySQL进阶阶段------MySQL进阶查询:条件、排序、分组、多表连接。
单表查询只能满足简单的业务需求,实际开发中,我们经常需要处理更复杂的查询场景(如查询年龄大于20且手机号以138开头的用户、按年龄分组统计用户数量、关联用户表和订单表查询用户的订单信息)。下一篇将详细讲解高级条件查询、排序、分页、分组聚合,以及核心的多表连接(内连接、左连接、右连接),彻底搞定复杂查询场景,满足真实业务的查询需求,让你的SQL查询能力再上一个台阶。