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

mysql互换表中两列数据方法的更多相关文章

  1. mysql互换表中两列数据

    在开发过程中,有时由于业务等需要把一个表中的两列数据进行交换. 解决方案 使用update命令,这完全得益于MySQL SQL命令功能的强大支持. 表格中原来数据类似如下: select * from ...

  2. 对一个表中所有列数据模糊查询adoquery

    如何用adoquery对一个表中所有列进行模糊查询: procedure TForm3.Button4Click(Sender: TObject); var ASql,AKey: string; I: ...

  3. mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享

    原文地址:http://www.maomao365.com/?p=7335 摘要:    数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql ...

  4. MySQL设置表中字段的数据唯一性

    mysql设置数据库表里的某个字段的数据是唯一的 ALTER TABLE 表名 ADD unique(`表中的字段`)

  5. Sqlserver将表中某列数据以符号分成多行

    WITH testtb2 AS ( UNION ALL ) ) ) ) ) PERCENT SUBSTRING(VisitorCard, STA - LENS, LENS) AS OrderReque ...

  6. vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表

    vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...

  7. Excel 将A表的基础数据拼接到B表中来-三种方法: ctrl+回车, VLOOKUP()函数,宏

    A表  基础信息表 B表 业务信息表 将a表中的基础数据 拼接到B表的后面, 应用场景是: B表很多数据,很繁乱,名字不一定全, A表也是比较多的行,B表乱:比如有8行有李晨的,却只有3行是范仲淹的, ...

  8. 如何实现MySQL表数据随机读取?从mysql表中读取随机数据

    文章转自 http://blog.efbase.org/2006/10/16/244/如何实现MySQL表数据随机读取?从mysql表中读取随机数据?以前在群里讨论过这个问题,比较的有意思.mysql ...

  9. MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容

    MySQL将一张表的某些列数据,复制到另外一张表 INSERT INTO t_topic_content(content,topicId) SELECT content,id FROM t_topi ...

随机推荐

  1. man中文手册配置

    1.ubuntu环境man中文手册配置 1)  终端输入sudo apt-get install manpages-zh 2)  安装后修改配置文件sudo gedit /etc/manpath.co ...

  2. Python开发【第十二篇】:DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  3. Eclipse插件checkstyle安装使用

    方法一:   1.Eclipse中,选择Help->Software Updates->Find and Install   2.选择 Search for new features to ...

  4. 本地自定义了404 和500 错误处理 部署到IIS上显示 服务器内部错误

    问题如图 解决办法如下,在IIS上设置一下即可

  5. div+css使多行文字垂直居中?

    1.单行文字: 设置height = line-height; 多行文字: 设置 padding, 自己要计算一下? vertical-align: 可以设置垂直居中, 但是只是针对本身就具有 ali ...

  6. vijos1740 聪明的质监员 (二分、区间求和)

    http://www.rqnoj.cn/problem/657 https://www.vijos.org/p/1740 P1740聪明的质检员 请登录后递交 标签:NOIP提高组2011[显示标签] ...

  7. activiti数据库表结构全貌解析

    http://www.jianshu.com/p/e6971e8a8dad 下面本人介绍一些activiti这款开源流程设计引擎的数据库表结构,首先阐述:我们刚开始接触或者使用一个新的东西(技术)时我 ...

  8. SQL获取日期格式

    ) + ' ' + CONVERT(VARCHAR, DATEPART(hh, GetDate())) + ':' + ) AS Date ),) ),) ),) as DateTime) as [D ...

  9. jquery datagrid加载后仅选定第一行

    function onLoadSuccess(data) { var rows = $("#DataGrid").datagrid("getRows"); if ...

  10. 兼容ie的jquery ajax文件上传

    Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...