当前位置: 首页 > 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.zskr.cn/news/1435055.html

相关文章:

  • Arduino UNO超声波避障机器人:从核心原理到工程实践全解析
  • 基于ESP8266的太阳能智能灌溉监测系统:从硬件到云端的完整实践
  • WPinternals深度解析:Windows Phone启动加载器解锁技术实现原理
  • 基于Arduino与超声波传感器的自动感应垃圾桶制作全攻略
  • 学习记录week1-VMware安装虚拟机、克隆等
  • 基于Arduino的棒球街机游戏机:从机械设计到嵌入式编程的完整实现
  • 杭州朱大姐家政服务:临安区家具贴膜公司推荐 - LYL仔仔
  • 如何用WeChatMsg让微信聊天记录成为你的数字记忆宝库?
  • Anno 1800 Mod Loader:重新定义游戏模组开发的技术架构
  • 2026年,高校老师躺平时代正式终结:不会用AI做实证的人,正在被考核淘汰 - AI论文先行者
  • 如何用res-downloader打破平台壁垒,实现跨平台资源自由下载
  • DIY便携式飞机轮椅:用PVC与实木打造无障碍出行方案
  • 基于Arduino与R307指纹传感器的智能门锁系统设计与实现
  • 蛋白质主链以及甲基认证的核磁共振方法学解析方案【附代码】
  • 基于Arduino的防贪睡闹钟:从传感器到状态机的嵌入式系统实践
  • 2026 年重庆名表回收榜单:添价收团队专业估价靠谱 - 薛定谔的梨花猫
  • 2026 南京奢侈品回收综合测评,添价收门店靠谱值得信赖 - 薛定谔的梨花猫
  • 告别混乱!用Windows iSCSI发起程序+华为存储,5分钟搞定你的个人开发/测试环境虚拟磁盘
  • Arduino智能小车入门:从硬件搭建到编程控制全流程指南
  • 北京黄金回收实测:正规店铺口碑,价格透明不踩坑2026年 - 奢侈品回收
  • 突破传统嵌入式开发限制:用ESP32-Arduino实现300%效率提升的物联网创新方案
  • 如何快速实现网易云音乐NCM格式转换:终极解密工具指南
  • 论文省心了!2026年最值得信赖的专业降AI率平台
  • 从地图导航到网络优化:Floyd最短路径算法在真实项目中的5个应用场景
  • 如何理解与应用RevokeMsgPatcher:深入解析Windows消息防撤回技术原理
  • 基于Arduino与DS3231的自动水培控制器:从定时原理到安全实践
  • 基于Arduino的发光曲棍球游戏:嵌入式系统入门实战
  • 如何用OpCore Simplify工具简化OpenCore EFI配置:从繁琐到一键生成的技术实践
  • QR二维码修复终极指南:从损坏到解码的5个高效技巧
  • AI公关生死线:Gemini发布前72小时决策日志曝光——错过这4个关键节点=主动放弃首周声量