mysql基础-数据操作之增删改

news2024/11/18 1:22:32

目录

1.新增数据

1.1单条数据新增

1.2多条数据新增

1.3查询数据新增

2.更新

2.1单值更新

2.2多值更新

2.3批量更新

2.3.1 批量-单条件更新

2.3.2批量-多条件更新

2.4 插入或更新

2.5 联表更新

3.删除


本次分享一下数据库的DML操作语言。

操作表的数据结构:

CREATE TABLE `t_order` (
  `order_id` int(12) NOT NULL AUTO_INCREMENT COMMENT '订单主键',
  `money` decimal(10,2) DEFAULT NULL COMMENT '金额',
  `good_id` int(12) DEFAULT NULL COMMENT '商品ID',
  `good_name` varchar(20) DEFAULT NULL COMMENT '商品名称',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

新增语法:

insert into <table> (字段1,字段2) values (字段1值,字段2值)

1.新增数据

1.1单条数据新增

新增一条商品名称为松子的订单:

INSERT INTO `t_order`(`money`, `good_id`, `good_name`) VALUES ( 2.00, 11, '松子');

1.2多条数据新增

和单条数据相比,就是多一组数值。

INSERT INTO `t_order`(`money`, `good_id`, `good_name`) VALUES ( 2.00, 11, '松子'),( 3.00, 12, '巴旦木');

注意:字段名和字段值一定要一一对应。

1.3查询数据新增

假如我们有一张2023年的表,表结构和t_order相同,数据如下:

我们可以使用如下语句,将数据插入到t_order表中,

INSERT INTO `t_order`(`money`, `good_id`, `good_name`)   select  `money`, `good_id`, `good_name` from t_order_2023 where good_name = '苹果'

注意:插入的字段名顺序和查询的值需要一一对应。

2.更新数据

更新语法:

update <table> set 字段1=更新1值,字段2=更新2值

以下示例就不再粘图,有兴趣可以自行试一下。

2.1单值更新

示例:将order_id = 5的数据的商品名称改为火龙果

update t_order set good_name = '火龙果' where order_id = 5

2.2多值更新

示例:将商品名称为火龙果的数据的金额改为10,商品id改为99

update t_order set money=10,good_id = 99 where good_name = '火龙果'

2.3批量更新

2.3.1 批量-单条件更新

所谓单条件就是case中只有一个条件。

示例:将order_id = 1的商品名称改为松子1,将order_id = 2 的商品名称改为巴旦木1

UPDATE t_order 
SET good_name =
CASE
	WHEN order_id = 1 THEN '松子1' 
	WHEN order_id = 2 THEN '巴旦木1'
	else good_name
	end 

2.3.2 批量-多条件更新

所谓单条件就是case中有多个条件。

示例:将order_id = 1且 金额 = 2 的商品名称改为松子1,将order_id = 2 且 金额 = 3 的商品名称改为巴旦木1

UPDATE t_order 
SET good_name =
CASE
	WHEN order_id = 1 and money = 2 THEN '松子2' 
	WHEN order_id = 2 and money = 3 THEN '巴旦木2'
	else good_name
	end 
	

2.4 插入或更新

执行一条sql语句,如果存在则更新,如果不存在,则新增。前提必须有主键或唯一索引

语法:

INSERT INTO <table> (字段1, 字段2, 字段3, ...)  VALUES (字段值1, 字段值2, 字段值3, ...)
ON DUPLICATE KEY UPDATE SET 字段2 = 字段2只, 字段3 = 字段3值, ...;

示例:插入或更新 order_id = 1 的数据的商品名称改为'松子3'

	insert into t_order (order_id,good_name) value (1,'松子3') ON DUPLICATE KEY update good_name = '松子3';

注意事项:此处返回的修改条数为2,但是在数据库修改的就是order_id = 1这条数据。

2.5 联表更新

示例:假如我们存在一张商品表(表结构如下),此时我们需要更新商品名称为‘松子3’的订单的金额为5,商品名称的判断不能从订单中判断,需要从商品中判断,商品表与订单表通过good_id关联。

-- 商品表结构
CREATE TABLE `t_good` (
  `good_id` int(12) NOT NULL COMMENT '主键',
  `good_name` varchar(20) DEFAULT NULL COMMENT '商品名称',
  PRIMARY KEY (`good_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

sql如下(下次分享联表查询):

update t_order t1 join t_good  t2 on t1.good_id = t2.good_id set money = 5 where t2.good_name = '松子3'

3.删除数据

语法:

delete from  <table> where <condition>

示例:(订单表在生产环境均不会删除,此处仅为示例)假如我们存在一张商品表(表结构如上-联表更新),此时我们需要删除商品名称为'松子3'的数据,商品名称的判断不能从订单中判断,需要从商品中判断,商品表与订单表通过good_id关联。

删除语句如下:

DELETE 
FROM
	t_order 
WHERE
	order_id IN ( SELECT order_id FROM t_order WHERE good_id = ( SELECT good_id FROM t_good WHERE good_name = '松子3' ) )

报错信息:

delete from t_order where order_id in (select order_id from t_order where good_id = (select good_id from t_good where good_name = '松子3'  ) )
> 1093 - You can't specify target table 't_order' for update in FROM clause
> 时间: 0.002s

报错的含义:不能从一个表中查询出数据,再继续删除这个表单的数据。我们可以修改在查询出来的数据进行一次表名封装。

修改如下:

DELETE 
FROM
	t_order 
WHERE
	order_id IN ( select order_id from (SELECT order_id FROM t_order WHERE good_id = ( SELECT good_id FROM t_good WHERE good_name = '松子3' )) a  )

这样就可以了,举例可能不当,错误原因当理解,解决方法当知道。

本次分享至此。

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

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

相关文章

《计算机科学中的建模技术》复习点

0 考试题型 题型&#xff1a;选择、填空、大题&#xff08;综合题&#xff09; 分值&#xff1a;选择填空30分&#xff0c;综合70分 填空&#xff1a;基本概念题 第 1 章&#xff1a;计算机科学基本问题与数学建模概要 1.1 科学计算的基本概念 科学计算是指利用计算机来完成…

Transformer架构和对照代码详解

1、英文架构图 下面图中展示了Transformer的英文架构&#xff0c;英文架构中的模块名称和具体代码一一对应&#xff0c;方便大家对照代码、理解和使用。 2、编码器 2.1 编码器介绍 从宏观⻆度来看&#xff0c;Transformer的编码器是由多个相同的层叠加⽽ 成的&#xff0c;每个…

【数据结构】二叉树的概念及堆

前言 我们已经学过了顺序表、链表、栈和队列这些属于线性结构的数据结构&#xff0c;那么下面我们就要学习我们第一个非线性结构&#xff0c;非线性结构又有哪些值得我们使用的呢&#xff1f;那么接下来我们就将谈谈树的概念了。 1.树的概念与结构 1.1树的概念 树是一种非线性…

2.C++的编译:命令行、makefile和CMake

1. 命令行编译 命令行编译是指直接在命令行中输入以下指令&#xff1a; 预处理&#xff1a;gcc -E main.c -o main.i 编译&#xff1a;gcc -S main.i -o main.s 汇编&#xff1a;gcc -c main.s -o main.o 链接&#xff1a;gcc main.o -o main 命令汇总&#xff1a;gcc main.c …

【ZooKeeper高手实战】ZAB协议:ZooKeeper分布式一致性的基石

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

第17课 为rtsp流加入移动检测功能

在上节课&#xff0c;我们成功拿到了rtsp视频和音频流&#xff0c;在第13课&#xff0c;我们为普通的usb摄像头加上了移动检测功能&#xff0c;那能不能给rtsp摄像头也加上移动检测功能以实现一些好玩的应用呢&#xff1f;答案是肯定的&#xff0c;在usb摄像头检测中&#xff0…

BetaFlight开源代码之电压校准

BetaFlight开源代码之电压校准 1. 源由2. 分析数据流3. 采样电路3. 原理4. 示例5. 实测&转换数据6. 参考资料 1. 源由 既然复杂的BetaFlight开源代码之电流校准都过了一遍&#xff0c;电压相对来说是比较简单的&#xff0c;一起过一下 2. 分析数据流 电源路径1》采样电路…

【Spring实战】24 使用 Spring Boot Admin 管理和监控应用

文章目录 1. 定义2. 使用场景3. 主要功能4. 示例1&#xff09;[服务端] 添加依赖2&#xff09;[服务端] 相关配置3&#xff09;[服务端] 启动类4&#xff09;[服务端] 启动服务5&#xff09;[服务端] 浏览器访问6&#xff09;[客户端] 添加依赖7&#xff09;[客户端] 相关配置8…

双变量probit模型

1. Probit模型 1.1 模型含义 假设个体只有两种选择&#xff0c;y1或y0。影响选择的变量都包括在向量x中。即线性概率模型为 y值服从两点分布 被认为是连接函数&#xff0c;函数选择具有一定的灵活性。如果为标准正态的累积分布函数&#xff0c;则模型成为Probit模型&#xff…

网络嗅探器的设计与实现(2024)-转载

1.题目描述 参照 raw socket 编程例子&#xff0c;设计一个可以监视网络的状态、数据流动情况以及网络上传输 的信息的网络嗅探器。 2.运行结果 3.导入程序需要的库 请参考下面链接: 导入WinPcap到Clion (2024)-CSDN博客 4.参考代码 #define HAVE_REMOTE #define LINE_LEN …

【数据库原理】(11)SQL数据查询功能

基本格式 SELECT [ALL|DISTINCT]<目标列表达式>[,目标列表达式>]... FROM <表名或视图名>[,<表名或视图名>] ... [ WHERE <条件表达式>] [GROUP BY<列名 1>[HAVING <条件表达式>]] [ORDER BY <列名 2>[ASC DESC]];SELECT: 指定要…

WinForms中的UI卡死

WinForms中的UI卡死 WinForms中的UI卡死通常是由于长时间运行的操作阻塞了UI线程所导致的。在UI线程上执行的操作&#xff0c;例如数据访问、计算、文件读写等&#xff0c;如果耗时较长&#xff0c;会使得UI界面失去响应&#xff0c;甚至出现卡死的情况。 解决方法 为了避免…

061:vue中通过map修改一维数组,增加一些变量

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

系列二、GitHub中的Alpha、Beta、RC、GA、Release等各个版本

一、GitHub中的Alpha、Beta、RC、GA 1.1、概述 1.2、参考 https://www.cnblogs.com/huzhengyu/p/13905129.html

Qt——TCP UDP网络编程

目录 前言正文一、TCP二、UDP1、基本流程2、必备知识 三、代码层级1、UDP服务端 END、总结的知识与问题1、如何获取QByteArray中某一字节的数据&#xff0c;并将其转为十进制&#xff1f;2、如何以本年本月本日为基础&#xff0c;获取时间戳&#xff0c;而不以1970为基础&#…

Ps 滤镜:高反差保留

Ps菜单&#xff1a;滤镜/其它/高反差保留 Filter/Others/High Pass 高反差保留 High Pass滤镜常用于锐化、保护纹理、提取线条等图像编辑工作流程中。它的工作原理是&#xff1a;只保留显示图像中的高频信息&#xff08;即图像中的细节和边缘区域&#xff09;&#xff0c;而图像…

二分查找算法(指定数值的左右边界)

之前一直以为二分查找有什么难的&#xff0c;不就是确定左右边界&#xff0c;然后while循环求mid&#xff0c;大于mid的找右半边&#xff0c;小于mid的找左半边。直到最后相同了就是最后查找的结果了. 后来等真正用到二分查找算法的时候&#xff0c;发现问题远没有这么简单&…

【论文阅读笔记】ISINet: An Instance-Based Approach for Surgical Instrument Segmentation

1. 论文介绍 ISINet: An Instance-Based Approach for Surgical Instrument Segmentation ISINet&#xff1a;一种基于实例的手术器械分割方法 2020 MICCAI 【Paper】 【Code】 2.摘要 我们研究了机器人辅助手术场景中手术器械的语义分割任务。我们提出了基于实例的手术器械…

计算机Java项目|基于Springboot实现患者管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号&#xff1a;KS-032…

Hello 2024

Hello 2024 A. Wallet Exchange 题意&#xff1a;Alice和Bob各有a和b枚硬币&#xff0c;每次他们可以选择交换硬币或者保留&#xff0c;然后扣除当前一枚手中的硬币&#xff0c;当一方没得扣另一方就赢了。 思路&#xff1a;Alice先手&#xff0c;所以当硬币和为奇数时Alice…