DBA | MySQL 数据库基础数据操作学习实践笔记

知识是人生的灯塔,只有不断学习,才能照亮前行的道路

📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。

0x00 前言简述

描述:前面我们学习了DDL 数据定义语言的相关语句,以及介绍了 MySQL 五种数据类型,相信大家参考后必有所心得,趁热打铁,现在我们学习 DML 数据库操作语言,包含数据行的插入,更新以及删除(INSERT、UPDATE、DELETE)等语句。

温馨提示:若文章代码块中存在乱码,请通过文末的阅读原文链接,在知识星球中阅读,或者直接访问 https://articles.zsxq.com/id_l3z7unppx0sx.html

为了后续的学习,我们先来准备一个员工表,并插入几行数据,方便后续的演示。

sql 复制代码
-- 创建数据库CREATE DATABASE IF NOT EXISTS test;-- 切换到数据库USE test;-- 建表语句示例:CREATE TABLE IF NOT EXISTS employees (  id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',  uid VARCHAR(10) COMMENT '工号',  name VARCHAR(10) NOT NULL COMMENT '姓名',  gender ENUM('男', '女', '未知') NOT NULL COMMENT '性别' DEFAULT '未知',  age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄' CHECK (age > 0 AND age < 120),  phone_number CHAR(11) NOT NULL COMMENT '手机号' CHECK (phone_number REGEXP '^1[3-9]\\d{9}$'),  skills JSON COMMENT '技能',  id_card CHAR(18) NOT NULL UNIQUE KEY  COMMENT '身份证号' CHECK (id_card REGEXP '^\\d{17}[0-9Xx]$'),  city VARCHAR(50) NOT NULL COMMENT '城市',  entry_date DATE COMMENT '入职时间',  salary DECIMAL(10, 2) NOT NULL DEFAULT 0.0 COMMENT '薪资' CHECK (salary > 0),  PRIMARY KEY (id),  INDEX  idx_id_card (id_card)) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='员工信息表';

0x01 DML 数据操作语言

1.插入记录(INSERT)

描述:通过 INSERT 语句可以向表中插入新的数据行。

特别注意:

  • 在插入数据时,指定的字段顺序需要与值的顺序一致,否则会报错。另外,如果要插入的数据中包含自增字段(AUTO_INCREMENT),则该字段的值需要设置为 NULL 或者不指定(显式指定字段时),由数据库自动生成。

  • 在插入数据时,字符串和日期类型的值需要用引号(推荐:单引号)括起来,例如:'张三', '2023-04-01'。

  • 在插入数据时,应该注意数据类型的匹配,例如:年龄字段是 TINYINT UNSIGNED 类型,应该插入的是正整数,而非是负整数。

指定字段添加数据

go 复制代码
-- # 语法
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);

-- # 示例
INSERT INTO employees (uid, name, gender, age, phone_number, skills, id_card, city ,entry_date, salary) VALUES ('001', '张三', '男', 30, '13800138000', '{"编程": "高级", "设计": "中级"}', '500102199001010001', '重庆','2020-01-01', 7500.00);
INSERT INTO employees (uid, name, gender, age, phone_number, skills, id_card,city , entry_date, salary) VALUES ('002', '李四', '女', 28, '13900139000', '{"测试": "高级", "项目管理": "中级"}', '500102199201010002','北京', '2020-02-15', 15800.00);
INSERT INTO employees (uid, name, gender, age, phone_number, skills, id_card, city ,entry_date, salary) VALUES ('003', '王五', '男', 35, '13700137000', '{"数据库": "专家", "架构": "高级"}', '500102198801010003','上海','2019-05-10', 16000.00);
INSERT INTO employees (uid, name, gender, age, phone_number, skills, id_card,city, entry_date, salary) VALUES ('004', '赵六', '女', 26, '13600136000', '{"前端": "高级", "UI设计": "中级"}', '500102199601010004', '杭州','2021-03-20', 12000.00);

按照字段顺序添加数据

go 复制代码
-- # 语法
INSERT INTO 表名 VALUES (值1, 值2, ...);

-- # 示例
-- 注意:这里的值要和表中的字段顺序一致, 其次自增长的字段需要设置为NULL进行占位。
INSERT INTO employees VALUES (NULL,'005', '钱七', '男', 32, '13500135000', '{"运维": "高级", "网络安全": "中级"}', '500102199001010005','成都', '2018-08-05', 9000.00);

批量添加数据

go 复制代码
-- # 语法
INSERT INTO 表名 VALUES (值1, 值2, ...), (值3, 值4, ...);
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2), (值3, 值4);

-- # 示例
INSERT INTO employees (uid, name, gender, age, phone_number, skills, id_card, city, entry_date, salary) VALUES ('006', '孙八', '女', 29, '13400134000', '{"数据分析": "高级", "机器学习": "中级"}', '500102199301010006', '深圳','2020-11-12', 13500.00),('007', '周九', '男', 27, '13300133000', '{"移动开发": "高级", "后端": "中级"}', '500102199501010007','广州', '2021-07-30', 11500.00),(NULL, '吴十', '女', 31, '13200132000', '{"产品经理": "高级", "市场分析": "专家"}', '500102199101010008','重庆',  '2019-09-18','12800.00');

最后,在 MySQL 命令行工具 或 DataGrip 图形化界面中执行上述 SQL 语句,可以看到 employees 表已经成功插入数据,若未安装 DataGrip 可参考作者前面的文章进行安装。
weiyigeek.top-演示SQL查询的表数据图


2.更新记录(UPDATE)

描述:UPDATE 语句用于修改表中的数据。注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据, 不过在生产环境中一定要添加条件,否则容易造成数据的误更新。

温馨提示:为了不影响后续演示,我将 employees 表结构及数据复制一份到 employees_test 表。

go 复制代码
-- 复制表结构及数据到新表
CREATE TABLE IF NOT EXISTS employees_test LIKE employees;
-- 复制数据到新表
INSERT INTO employees_test SELECT * FROM employees;

语法示例

go 复制代码
-- # 语法
UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2 WHERE 条件;

-- # 示例
-- 更新员工张三的薪资为10000.00,手机号为13900138421
UPDATE employees_test SET salary = 10000.00, phone_number = '13900138421' WHERE name = '张三';

-- 更新所有员工的城市为'重庆' , 注意:在生产环境中,不建议使用无条件的更新语句
UPDATE employees_test SET city = '重庆';

weiyigeek.top-查询更新的员工表数据图


3.删除记录(DELETE)

描述:DELETE 语句用于删除表中的数据。注意:删除语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据, 建议在生产环境中一定要添加条件,否则容易造成数据的误删除。

温馨提示:DELETE 语句不能删除表的某一个字段,如果要删除某个字段的数据,可以使用 UPDATE 语句将该字段设置为 NULL 或者其他默认值。

语法示例

go 复制代码
-- # 语法
DELETE FROM 表名 WHERE 条件;

-- # 示例
-- 删除员工表中姓名为'李四'的记录
mysql> DELETE FROM employees_test WHERE name = '李四';
[2025-09-25 11:37:25] 1 row affected in 156 ms

-- 删除所有员工的记录 注意:在生产环境中不建议使用无条件的删除语句
DELETE FROM employees_test;

温馨提示:DELETE 语句 与 TRUNCATE TABLE 语句的区别是,DELETE 语句可以删除表中的部分数据且在开启 BINLOG 时即可恢复误删除的数据,而 TRUNCATE TABLE 语句会删除整个表的数据并重置自增计数器。

总结:

  • INSERT 语句用于向表中插入新的数据行。

  • UPDATE 语句用于修改(更新)表中的数据。

  • DELETE 语句用于从表中删除数据。

go 复制代码
INSERT INTO 表名 VALUES (值1, 值2, ...);

UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2 WHERE 条件;

DELETE FROM 表名 WHERE 条件;

至此,MySQL 基础操作之增删改查就介绍完了,后续会继续分享 MySQL 基础查询 DQL 语句的相关内容。

END

加入:作者【全栈工程师修炼指南】知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?

✅ 将获得作者最新工作学习实践文章以及网盘资源。

✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买)

✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。

✅ 将获得作者远程支持(在作者能力范围内且合规)。

获取:作者工作学习全栈笔记

作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

知识推荐 往期文章

若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!

相关推荐
励志不掉头发的内向程序员3 小时前
【Linux系列】让 Vim “跑”起来:实现一个会动的进度条
linux·运维·服务器·开发语言·学习
天生励志1233 小时前
【学习笔记】黑马Java+AI智能辅助编程视频教程,java基础入门
java·笔记·学习
牛奶咖啡133 小时前
通过keepalived搭建MySQL双主模式的MySQL集群
数据库·mysql·mysql双主互备模式架构·mysql双主互备模式搭建·mysql主主互备模式·mysql双主互备实现高可用·keepalived高可用
小张爱学习哦3 小时前
带符号整数乘法器设计
学习·fpga开发·硬件工程
寅双木3 小时前
常见的九种二极管
笔记·嵌入式硬件·稳压二极管·tvs·肖特基二极管·发光二极管·齐纳击穿
Daimxiaocai3 小时前
AD-批量过孔
学习·硬件工程·射频工程
每次的天空3 小时前
Android-Git技术总结
android·学习
linuxxx1104 小时前
Django HttpRequest 对象的常用属性
数据库·sqlite
熊文豪4 小时前
政务系统国产化的“教科书级“实践:MongoDB平滑迁移成功案例解析
数据库·mongodb·政务·kingbasees·金仓数据库