当前位置: 首页 > news >正文

MySQL 数据增删改(DML)操作

MySQL 数据增删改(DML)操作

MySQL 数据增删改(DML)操作笔记


一、数据插入(INSERT INTO

1. 基本语法

-- 错误写法:必须指定字段顺序,或和VALUES一一对应
INSERT INTO emp1
VALUES (2, 3400, '2000-12-21', 'Jerry');

2. 推荐写法:指定字段插入

-- 明确指定字段,顺序可自定义,未指定字段默认NULL
INSERT INTO emp1(id, hire_date, salary, `name`)
VALUES (2, '1999-09-09', 4000, 'Jerry');-- 只插入部分字段,未赋值字段自动为NULL
INSERT INTO emp1(id, salary, `name`)
VALUES (3, 4500, 'shk');

3. 批量插入多条记录

INSERT INTO emp1(id, `name`, salary)
VALUES 
(4, 'Jim', 5000),
(5, '张俊杰', 5500);

4. 将查询结果插入表中

-- 从employees表查询数据,批量插入emp1
INSERT INTO emp1(id, `name`, salary, hire_date)
SELECT employee_id, last_name, salary, hire_date
FROM employees
WHERE department_id IN (70, 60);

注意:查询字段的数量、类型、长度必须和目标表字段一一对应,否则会插入失败。


二、数据更新(UPDATE ... SET

1. 单字段更新

-- 修改id=5的员工入职日期为当前日期
UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 5;

2. 多字段同时更新

-- 同时修改id=4的员工入职日期和工资
UPDATE emp1
SET hire_date = CURDATE(), salary = 6000
WHERE id = 4;

3. 条件批量更新

-- 将姓名中包含字符'a'的员工加薪20%
UPDATE emp1
SET salary = salary * 1.2
WHERE `name` LIKE '%a%';

4. 更新失败场景(约束影响)

-- 因employees表存在外键约束(引用departments表),修改department_id=10000会失败
UPDATE employees
SET department_id = 10000
WHERE employee_id = 102;

三、数据删除(DELETE FROM ... WHERE

1. 条件删除数据

-- 删除emp1表中id=1的记录
DELETE FROM emp1
WHERE id = 1;

2. 删除失败场景(约束影响)

-- departments表被employees表引用(外键约束),删除department_id=50会失败
DELETE FROM departments
WHERE department_id = 50;

四、DML 操作事务说明

  • 默认自动提交:DML操作(INSERT/UPDATE/DELETE)执行后,数据会永久保存,无法回滚。
  • 开启事务控制
    -- 关闭自动提交,开启事务
    SET autocommit = FALSE;-- 执行DML操作
    DELETE FROM emp1 WHERE id = 2;-- 回滚数据(恢复到事务开始前状态)
    ROLLBACK;-- 提交数据(永久保存,无法回滚)
    COMMIT;
    

五、MySQL 8.0 新特性:计算列

1. 概念

计算列的值由其他列通过表达式计算生成,无需手动插入/更新,会自动维护。

2. 示例

CREATE TABLE test1(a INT,b INT,-- 计算列c,值为a + b,类型为INTc INT GENERATED ALWAYS AS (a + b) VIRTUAL
);-- 插入数据时,无需为c赋值,会自动计算
INSERT INTO test1(a, b)
VALUES (10, 20);-- 查询数据,c会自动显示a+b的结果
SELECT * FROM test1;-- 修改a的值,c会自动更新
UPDATE test1
SET a = 100;

核心知识点总结

操作类型 关键语法 注意事项
插入数据 INSERT INTO 表名(字段列表) VALUES(值列表) 字段与值必须一一对应,批量插入用逗号分隔多条记录
插入查询结果 INSERT INTO ... SELECT ... FROM ... 查询字段的数量、类型、长度必须与目标表字段匹配
更新数据 UPDATE 表名 SET 字段=值 WHERE 条件 可同时更新多个字段,受约束影响可能更新失败
删除数据 DELETE FROM 表名 WHERE 条件 外键约束会导致删除失败,需先删除引用数据
事务控制 SET autocommit=FALSE; ROLLBACK; COMMIT; 仅DML操作支持事务,DDL操作无法回滚
计算列 GENERATED ALWAYS AS (表达式) VIRTUAL 由其他列计算生成,自动维护,无需手动赋值

常见易错点

  1. 插入数据字段不匹配INSERT 时字段列表和 VALUES 顺序/数量不一致,会导致数据错位或报错。
  2. 更新/删除无WHERE条件:会修改/删除表中所有数据,务必谨慎。
  3. 外键约束影响:主表数据被从表引用时,无法直接修改/删除,需先处理从表数据。
  4. 计算列无法手动赋值:插入/更新时不能为计算列赋值,否则会报错。
http://www.jsqmd.com/news/923731/

相关文章:

  • Arduino记忆游戏实战:从硬件设计到状态机编程全解析
  • MASA模组汉化包:为Minecraft 1.21带来无语言障碍的创作体验
  • 如何让老旧电视重获新生?三大优化方案让直播体验焕然一新
  • Arduino UNO超声波避障机器人:从核心原理到工程实践全解析
  • 基于ESP8266的太阳能智能灌溉监测系统:从硬件到云端的完整实践
  • 基于Arduino与超声波传感器的自动感应垃圾桶制作全攻略
  • WPinternals深度解析:Windows Phone启动加载器解锁技术实现原理
  • 学习记录week1-VMware安装虚拟机、克隆等
  • 基于Arduino的棒球街机游戏机:从机械设计到嵌入式编程的完整实现
  • 微信数据管理终极指南:如何安全导出并永久保存聊天记录
  • 杭州朱大姐家政服务:临安区家具贴膜公司推荐 - LYL仔仔
  • 如何用WeChatMsg让微信聊天记录成为你的数字记忆宝库?
  • Tinkercad仿真Arduino温湿度监控:从虚拟电路到物联网闭环实践
  • 【Gemini信用评估模型深度解密】:20年风控专家首曝3大核心算法缺陷与实时调优方案
  • Anno 1800 Mod Loader:重新定义游戏模组开发的技术架构
  • 2026年,高校老师躺平时代正式终结:不会用AI做实证的人,正在被考核淘汰 - AI论文先行者
  • 多所高校严查论文AIGC率!纯手搓也被判80%?这届毕业生快被逼疯了…… - AI论文先行者
  • 基于树莓派DIY室内空气质量监测系统:从传感器选型到智能控制
  • DIY便携式飞机轮椅:用PVC与实木打造无障碍出行方案
  • 如何用res-downloader打破平台壁垒,实现跨平台资源自由下载
  • 终极解决方案:如何彻底告别PC版微信QQ消息撤回的遗憾
  • 2026 北京 GEO 优化机构实力榜单:全意图服务标杆与本地优质服务商盘点 - GEO优化
  • 基于Arduino与R307指纹传感器的智能门锁系统设计与实现
  • 微信聊天记录永久保存完全指南:让珍贵对话成为你的数字资产
  • 基于ESP8266与Alexa的智能灯光控制系统DIY全攻略
  • 临武黄金奢侈品回收避坑指南:正规机构推荐+防骗技巧全解析 - 小仙贝贝
  • 蛋白质主链以及甲基认证的核磁共振方法学解析方案【附代码】
  • 矿山做业实时监测透明化三维立体重构视频孪生数字孪生安全治理
  • 杭州绿映园艺:滨江口碑好的绿植租赁电话 - LYL仔仔
  • 鸣潮自动化工具:3大核心功能解放你的双手,智能后台战斗一键完成