IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql:如何在执行update后返回受影响的数据 -> 正文阅读

[大数据]mysql:如何在执行update后返回受影响的数据

环境:

  • window10
  • mysql 8.0.25
  • DBeaver

1. 问题

在sqlserver中,我们可以通过output关键字返回insertdeleteuptdate影响的行数(参照:《博文:sqlserver:使用output返回插入、删除的记录》),但mysql原生没有提供这种功能。

2. 解决办法

参考:《博文:MYSQL获取更新行的主键ID(更新返回所在行)》

首先,这是一个受限的解决办法,它要求这个表必须有主键,而且更新的时候不能更新主键!

先准备数据:

drop table if exists test
create table test(
	id int auto_increment primary key,
	name varchar(50),
	age int
)

insert into test(id,name,age) values
	(1,'刘备',40),
	(2,'关羽',38),
	(3,'张飞',36),
	(4,'诸葛亮',34);

select  *  from test

在这里插入图片描述
当我们执行单行更新时,可以使用如下:

SET @update_id := 0;
UPDATE test SET age = age + 1, id = (SELECT @update_id:= id)
WHERE age >39 and ( SELECT @uids := id ) is not null 
LIMIT 1; 
SELECT * from test where id=@update_id;

输出如下:
在这里插入图片描述

当我们执行多行更新时,可以使用如下:

SET @uids := null;
UPDATE test
   SET age = age+1
 WHERE age >35
   AND ( SELECT @uids := CONCAT_WS(',', id, @uids) ) is not null;

set @sql = CONCAT("select * from  test  where id in (",ifnull(@uids,'null'),")");

PREPARE stmt FROM @sql;
EXECUTE stmt ;
deallocate prepare stmt;

输出如下:
在这里插入图片描述

从上面的方案中,可以看出,我们是巧用了where里面的条件将要更新的主键值记录到了临时变量中,
所以,如果我们在更新时将主键也一块更新了,那就做不到输出了(注:除非使用触发器)。

3. 总结

其实,一般应用中,我们最多是返回insert的数据,很少去返回update后的数据的,更少有场景是更新主键值的,所以掌握上面的方法一般是够用的。

但我建议,最好没有这种应用的场景!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:37:16  更:2022-03-15 22:37:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:38:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码