06 mysql之DML

news2025/5/14 22:35:41

一、什么是DML

DML 用于操作数据库中的数据。主要命令包括:

  • INSERT:添加数据
  • SELECT:查询数据
  • UPDATE:修改数据
  • DELETE:删除数据

二、插入数据(INSERT)

2.1 插入单条记录

-- 插入学生记录(使用默认值)
INSERT INTO students (student_id, student_name, age, gender, birth)
VALUES (1,'张三', 18, 'M', '1996-7-22');

-- 插入教师记录(关联学生ID=1)
INSERT INTO teachers (teacher_id, teacher_name, subject, experience_years, mentor_student_id)
VALUES (1, '李四', '数学', 5, 1);

2.2 批量插入

INSERT INTO students (student_id, student_name, age, gender, birth)
VALUES 
(2, '王丽', 17, 'F', '1996-3-2'),
(3, '张起灵', 19, 'M', '1997-11-9');

数据库数据最后如下:

三、修改数据(UPDATE)

-- 修改单个记录
UPDATE students
SET age = 20, email = 'zhangsan_new@school.com'
WHERE student_id = 1;

-- 批量修改
UPDATE teachers
SET experience_years = experience_years + 1
WHERE subject = '数学';

四、删除数据(DELETE) 

-- 删除单条记录
DELETE FROM students WHERE student_id = 3;

-- 删除所有记录(保留表结构)
DELETE FROM teachers;

五、事务处理(ROLLBACK;)

回滚(Rollback)的作用是撤销还未提交的事务。MySQL中可以使用以下语句实现回滚:ROLLBACK;

确保一组操作的原子性(全部成功或全部失败):

DELIMITER //

CREATE PROCEDURE process_student_teacher()
BEGIN
    -- 声明错误处理
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;  -- 出错时回滚
        RESIGNAL;  -- 重新抛出错误
    END;

    -- 开始事务
    START TRANSACTION;

    -- 执行 SQL 操作
    INSERT INTO students (name, age) VALUES ('测试', 20);
    UPDATE teachers SET experience_years = 10 WHERE teacher_id = 1;

    -- 成功则提交
    COMMIT;
END //

DELIMITER ;

-- 调用存储过程
CALL process_student_teacher();

因为没有name这个字段,会回滚

  • DELIMITER //:由于存储过程包含多个 SQL 语句(用 ; 分隔),而 MySQL 默认用 ; 作为语句结束符,所以临时改成 // 避免冲突。

  • CREATE PROCEDURE:定义一个存储过程,名为 process_student_teacher

  • BEGIN ... END:存储过程的主体部分,包含要执行的 SQL 逻辑。

  • DECLARE EXIT HANDLER FOR SQLEXCEPTION

    • 声明一个 错误处理器(Error Handler),当发生 SQLEXCEPTION(SQL 错误)时触发。

    • EXIT 表示执行完错误处理后,退出存储过程(也可以使用 CONTINUE 继续执行)。

  • ROLLBACK

    • 如果发生错误(如插入失败、更新失败),回滚整个事务,撤销所有更改。

  • RESIGNAL(可选):

    • 重新抛出错误,让调用者(如应用程序)知道发生了什么问题。如果省略,错误会被静默处理。

  • START TRANSACTION

    • 开启一个事务,后续的 SQL 操作要么全部成功,要么全部失败(原子性)。

  • INSERT / UPDATE

    • 在事务内执行 SQL 操作,如果任何一步失败,整个事务会回滚。

  • COMMIT

    • 如果所有操作成功,提交事务,使更改永久生效。

  • CALL 用于执行存储过程,相当于调用一个封装好的 SQL 逻辑块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源

一.系统介绍 likeshop外卖点餐系统适用于茶饮类的外卖点餐场景,搭建自己的一点点、奈雪、喜茶点餐系统。 系统基于总部多门店的连锁模式,拥有门店独立管理后台,支持总部定价和门店定价LBS定位点餐,可堂食可外卖。无论运营还是二开…

纯Java实现反向传播算法:零依赖神经网络实战

在深度学习框架泛滥的今天,理解算法底层实现变得愈发重要。反向传播(Backpropagation)作为神经网络训练的基石算法,其实现往往被各种框架封装。本文将突破常规,仅用Java标准库实现完整BP算法,帮助开发者: 1) 深入理解BP数学原理。2) 掌握面向对象的神经网络实现。3) 构建可…

海纳思(Hi3798MV300)机顶盒遇到海思摄像头

海纳思机顶盒遇到海思摄像头,正好家里有个海思Hi3516的摄像头模组开发板,结合机顶盒来做个录像。 准备工作 海纳斯机顶盒摄像机模组两根网线、两个电源、路由器一块64G固态硬盘 摄像机模组和机顶盒都接入路由器的LAN口,确保网络正常通信。 …

Axure应用交互设计:表格跟随菜单移动效果(超长表单)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!本文如有帮助请订阅 Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:表格跟随菜单移动 主要内容:表格交互设计、动态面板嵌套、拖动时事件、移动动作 应用场景…

7系列 之 I/O标准和终端技术

背景 《ug471_7Series_SelectIO.pdf》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性,并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resource…

github 上的 CI/CD 的尝试

效果 步骤 新建仓库设置仓库的 page 新建一个 vite 的项目,改一下 vite.config.js 中的 base 工作流 在项目的根目录下新建一个 .github/workflows/ci.yml 文件,然后编辑一下内容 name: Build & Deploy Vue 3 Appon:push:branches: [main]permi…

yup 使用 3 - 利用 meta 实现表单字段与表格列的统一结构配置(适配 React Table)

yup 使用 3 - 利用 meta 实现表单字段与表格列的统一结构配置(适配 React Table) Categories: Tools Last edited time: May 11, 2025 7:45 PM Status: Done Tags: form validation, schema design, yup 本文介绍如何通过 Yup 的 meta() 字段&#xff0…

【OpenCV】imread函数的简单分析

目录 1.imread()1.1 imread()1.2 imread_()1.2.1 查找解码器(findDecoder)1.2.2 读取数据头(JpegDecoder-->readHeader)1.2.2.1 初始化错误信息(jpeg_std_error)1.2.2.2 创建jpeg解压缩对象(…

【Linux实践系列】:进程间通信:万字详解共享内存实现通信

🔥 本文专栏:Linux Linux实践项目 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 人生就像一场马拉松,重要的不是起点,而是坚持到终点的勇气 ★★★ 本文前置知识: …

【笔记】BCEWithLogitsLoss

工作原理 BCEWithLogitsLoss 是 PyTorch 中的一个损失函数,用于二分类问题。 它结合了 Sigmoid 激活函数和二元交叉熵(Binary Cross Entropy, BCE)损失在一个类中。 这不仅简化了代码,而且通过数值稳定性优化提高了模型训练的效…

关于Go语言的开发环境的搭建

1.Go开发环境的搭建 其实对于GO语言的这个开发环境的搭建的过程,类似于java的开发环境搭建,我们都是需要去安装这个开发工具包的,也就是俗称的这个SDK,他是对于我们的程序进行编译的,不然我们写的这个代码也是跑不起来…

Flutter PIP 插件 ---- 为iOS 重构PipController, Demo界面,更好的体验

接上文 Flutter PIP 插件 ---- 新增PipActivity,Android 11以下支持自动进入PIP Mode 项目地址 PIP, pub.dev也已经同步发布 pip 0.0.3,你的加星和点赞,将是我继续改进最大的动力 在之前的界面设计中,还原动画等体验一…

数据库管理-第325期 ADG Failover后该做啥(20250513)

数据库管理325期 2025-05-13 数据库管理-第325期 ADG Failover后该做啥(20250513)1 故障处置2 恢复原主库3 其他操作总结 数据库管理-第325期 ADG Failover后该做啥(20250513) 作者:胖头鱼的鱼缸(尹海文&a…

SQLi-Labs 第21-24关

Less-21 http://127.0.0.1/sqli-labs/Less-21/ 1,抓个请求包看看 分析分析cookie被base64URL编码了,解码之后就是admin 2,那么这个网站的漏洞利用方式也是和Less-20关一样的,只是攻击语句要先base64编码,再URL编码&…

PVE WIN10直通无线网卡蓝牙

在 Proxmox VE (PVE) 中直通 Intel AC3165 无线网卡的 **蓝牙模块**(通常属于 USB 设备,而非 PCIe 设备)需要特殊处理,因为它的蓝牙部分通常通过 USB 连接,而 Wi-Fi 部分才是 PCIe 设备。以下是详细步骤: …

第六节第二部分:抽象类的应用-模板方法设计模式

模板方法设计模式的写法 建议使用final关键字修饰模板方法 总结 代码: People(父类抽象类) package com.Abstract3; public abstract class People {/*设计模板方法设计模式* 1.定义一个模板方法出来*/public final void write(){System.out.println("\t\t\t…

在另一个省发布抖音作品,IP属地会随之变化吗?

你是否曾有过这样的疑惑:出差旅游时在外地发布了一条抖音视频,评论区突然冒出“IP怎么显示xx省了?”的提问?随着各大社交平台上线“IP属地”功能,用户的地理位置标识成为公开信息,而属地显示的“灵敏性”也…

卷积神经网络-从零开始构建一个卷积神经网络

目录 一、什么是卷积神经网络CNN 1.1、核心概念 1.2、卷积层 二、什么是卷积计算 2.1、卷积计算的例子: 2.2、点积 2.3、卷积与点积的关系 2.4、Padding(填充) 2.4.1、Padding的主要作用 1、控制输出特征图尺寸 2、保留边缘信息 3. 支持深层网络训练 2.4.2、Str…

uniapp-文件查找失败:‘@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue‘

uniapp-文件查找失败:‘dcloudio/uni-ui/lib/uni-icons/uni-icons.vue’ 今天在HBuilderX中使用uniapp开发微信小程序时遇到了这个问题,就是找不到uni-ui组件 当时创建项目,选择了一个中间带的底部带选项卡模板,并没有选择内置u…

Vue2.x 和 Vue3.x 对比-差异

Vue3的优点 diff算法的提升 vue2中的虚拟DOM是全量的对比,也就是不管是写死的还是动态节点都会一层层比较,浪费时间在静态节点上。 vue3新增静态标记(patchflag ),与之前虚拟节点对比,只对比带有patch fla…