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

mysql互换表中两列数据方法

1.创建表及记录用于测试

CREATE TABLE `product` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '产品id',  `name` varchar(50) NOT NULL COMMENT '产品名称',  `original_price` decimal(5,2) unsigned NOT NULL COMMENT '原价',  `price` decimal(5,2) unsigned NOT NULL COMMENT '现价',  PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  INSERT INTO `product` (`id`, `name`, `original_price`, `price`) VALUES  (NULL, '雪糕', '5', '3.5'),  (NULL, '鲜花', '18', '15'),  (NULL, '甜点', '25', '12.5'),  (NULL, '玩具', '55', '45'),  (NULL, '钱包', '285', '195');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
mysql> select * from product; +----+--------+----------------+--------+ | id | name   | original_price | price  | +----+--------+----------------+--------+ |  1 | 雪糕   |           5.00 |   3.50 | |  2 | 鲜花   |          18.00 |  15.00 | |  3 | 甜点   |          25.00 |  12.50 | |  4 | 玩具   |          55.00 |  45.00 | |  5 | 钱包   |         285.00 | 195.00 | +----+--------+----------------+--------+ 5 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11


2.互换original_price与price的值

新手可能会使用以下方法进行互换

update product set original_price=price,price=original_price;
  • 1
  • 1

但这样执行的结果只会使original_price与price的值都是price的值,因为update有顺序的, 
先执行original_price=price , original_price的值已经更新为price, 
然后执行price=original_price,这里相当于没有更新。

执行结果:

mysql> select * from product; +----+--------+----------------+--------+ | id | name   | original_price | price  | +----+--------+----------------+--------+ |  1 | 雪糕   |           5.00 |   3.50 | |  2 | 鲜花   |          18.00 |  15.00 | |  3 | 甜点   |          25.00 |  12.50 | |  4 | 玩具   |          55.00 |  45.00 | |  5 | 钱包   |         285.00 | 195.00 | +----+--------+----------------+--------+ 5 rows in set (0.00 sec)  mysql> update product set original_price=price,price=original_price; Query OK, 5 rows affected (0.00 sec) Rows matched: 5  Changed: 5  Warnings: 0  mysql> select * from product; +----+--------+----------------+--------+ | id | name   | original_price | price  | +----+--------+----------------+--------+ |  1 | 雪糕   |           3.50 |   3.50 | |  2 | 鲜花   |          15.00 |  15.00 | |  3 | 甜点   |          12.50 |  12.50 | |  4 | 玩具   |          45.00 |  45.00 | |  5 | 钱包   |         195.00 | 195.00 | +----+--------+----------------+--------+ 5 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27



正确的互换方法如下:

update product as a, product as b set a.original_price=b.price, a.price=b.original_price where a.id=b.id;
  • 1
  • 1

执行结果:

mysql> select * from product; +----+--------+----------------+--------+ | id | name   | original_price | price  | +----+--------+----------------+--------+ |  1 | 雪糕   |           5.00 |   3.50 | |  2 | 鲜花   |          18.00 |  15.00 | |  3 | 甜点   |          25.00 |  12.50 | |  4 | 玩具   |          55.00 |  45.00 | |  5 | 钱包   |         285.00 | 195.00 | +----+--------+----------------+--------+ 5 rows in set (0.00 sec)  mysql> update product as a, product as b set a.original_price=b.price, a.price=b.original_price where a.id=b.id; Query OK, 5 rows affected (0.01 sec) Rows matched: 5  Changed: 5  Warnings: 0  mysql> select * from product; +----+--------+----------------+--------+ | id | name   | original_price | price  | +----+--------+----------------+--------+ |  1 | 雪糕   |           3.50 |   5.00 | |  2 | 鲜花   |          15.00 |  18.00 | |  3 | 甜点   |          12.50 |  25.00 | |  4 | 玩具   |          45.00 |  55.00 | |  5 | 钱包   |         195.00 | 285.00 | +----+--------+----------------+--------+ 5 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
若转载请注明出处!若有疑问,请回复交流!

相关文章:

  • ASP.NET Core 指定环境发布(hosting environment)
  • [android] 手机卫士黑名单功能(ListView优化)
  • sqlserver去重复数据
  • Quartz学习总结(1)——Spring集成Quartz框架
  • Gearman + PHP 实现分布式对象调用
  • JAVA数据库编程
  • DEDECMS之三 首页、列表页怎么调用文章内容
  • 在opencv中实现中文输出
  • 使用wget下载xcode
  • Java接口中的字段
  • jar包启动与停止
  • 怎么使用微信JSSDK的自定义分享功能
  • YII学习
  • 因为安迪的一句话,这2万5千人凭空多出9亿财富!_财经_腾讯网
  • Ant编译Hadoop 1.0.3的eclipse-plugin插件包
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 07.Android之多媒体问题
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Go 语言编译器的 //go: 详解
  • JSDuck 与 AngularJS 融合技巧
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Js基础——数据类型之Null和Undefined
  • 第2章 网络文档
  • 利用jquery编写加法运算验证码
  • 前端技术周刊 2019-02-11 Serverless
  • 设计模式走一遍---观察者模式
  • 数组大概知多少
  • 小程序开发中的那些坑
  • 在Mac OS X上安装 Ruby运行环境
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • (C语言)fread与fwrite详解
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二)fiber的基本认识
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (理论篇)httpmoudle和httphandler一览
  • (一)基于IDEA的JAVA基础12
  • (转)德国人的记事本
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 设计模式初探
  • .NET6实现破解Modbus poll点表配置文件
  • .Net多线程总结
  • .net和jar包windows服务部署
  • .NET企业级应用架构设计系列之技术选型
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET委托:一个关于C#的睡前故事
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .net中应用SQL缓存(实例使用)
  • /etc/shadow字段详解