互换数据表中两列数据方法

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

<code class="hljs sql has-numbering"><span class="hljs-operator"><span class="hljs-keyword">CREATE <span class="hljs-keyword">TABLE <span class="hljs-string">`product` (
 <span class="hljs-string">`id` <span class="hljs-keyword">int(<span class="hljs-number">10) unsigned <span class="hljs-keyword">NOT <span class="hljs-keyword">NULL AUTO_INCREMENT COMMENT <span class="hljs-string">'产品id',
 <span class="hljs-string">`name` <span class="hljs-keyword">varchar(<span class="hljs-number">50) <span class="hljs-keyword">NOT <span class="hljs-keyword">NULL COMMENT <span class="hljs-string">'产品名称',
 <span class="hljs-string">`original_price` <span class="hljs-keyword">decimal(<span class="hljs-number">5,<span class="hljs-number">2) unsigned <span class="hljs-keyword">NOT <span class="hljs-keyword">NULL COMMENT <span class="hljs-string">'原价',
 <span class="hljs-string">`price` <span class="hljs-keyword">decimal(<span class="hljs-number">5,<span class="hljs-number">2) unsigned <span class="hljs-keyword">NOT <span class="hljs-keyword">NULL COMMENT <span class="hljs-string">'现价',
 <span class="hljs-keyword">PRIMARY <span class="hljs-keyword">KEY (<span class="hljs-string">`id`)
) ENGINE=InnoDB <span class="hljs-keyword">DEFAULT CHARSET=utf8;

<span class="hljs-operator"><span class="hljs-keyword">INSERT <span class="hljs-keyword">INTO <span class="hljs-string">`product` (<span class="hljs-string">`id`, <span class="hljs-string">`name`, <span class="hljs-string">`original_price`, <span class="hljs-string">`price`) <span class="hljs-keyword">VALUES 
(<span class="hljs-keyword">NULL, <span class="hljs-string">'雪糕', <span class="hljs-string">'5', <span class="hljs-string">'3.5'), 
(<span class="hljs-keyword">NULL, <span class="hljs-string">'鲜花', <span class="hljs-string">'18', <span class="hljs-string">'15'), 
(<span class="hljs-keyword">NULL, <span class="hljs-string">'甜点', <span class="hljs-string">'25', <span class="hljs-string">'12.5'), 
(<span class="hljs-keyword">NULL, <span class="hljs-string">'玩具', <span class="hljs-string">'55', <span class="hljs-string">'45'), 
(<span class="hljs-keyword">NULL, <span class="hljs-string">'钱包', <span class="hljs-string">'285', <span class="hljs-string">'195');</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
<code class="hljs asciidoc has-numbering"><span class="hljs-header">mysql> select * from product;
+----+--------+----------------+--------+
<span class="hljs-header">| 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 |
<span class="hljs-header">|  5 | 钱包   |         285.00 | 195.00 |
+----+--------+----------------+--------+
5 rows in set (0.00 sec)</span></span></span></code> 

2.互换original_price与price的值

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

<code class="hljs sql has-numbering"><span class="hljs-operator"><span class="hljs-keyword">update product <span class="hljs-keyword">set original_price=price,price=original_price;</span></span></span></code>
  • 1
  • 1

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

执行结果:

<code class="hljs asciidoc has-numbering"><span class="hljs-header">mysql> select * from product;
+----+--------+----------------+--------+
<span class="hljs-header">| 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 |
<span class="hljs-header">|  5 | 钱包   |         285.00 | 195.00 |
+----+--------+----------------+--------+
5 rows in set (0.00 sec)

mysql> update product set original<span class="hljs-emphasis">_price=price,price=original_price;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0

<span class="hljs-header">mysql> select * from product;
+----+--------+----------------+--------+
<span class="hljs-header">| 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 |
<span class="hljs-header">|  5 | 钱包   |         195.00 | 195.00 |
+----+--------+----------------+--------+
5 rows in set (0.00 sec)</span></span></span></span></span></span></span></code>

正确的互换方法如下:

<code class="hljs avrasm has-numbering">update product as a, product as b <span class="hljs-keyword">set a<span class="hljs-preprocessor">.original_price=b<span class="hljs-preprocessor">.price, a<span class="hljs-preprocessor">.price=b<span class="hljs-preprocessor">.original_price where a<span class="hljs-preprocessor">.id=b<span class="hljs-preprocessor">.id<span class="hljs-comment">;</span></span></span></span></span></span></span></span></code>

执行结果:

<code class="hljs asciidoc has-numbering"><span class="hljs-header">mysql> select * from product;
+----+--------+----------------+--------+
<span class="hljs-header">| 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 |
<span class="hljs-header">|  5 | 钱包   |         285.00 | 195.00 |
+----+--------+----------------+--------+
5 rows in set (0.00 sec)

mysql> update product as a, product as b set a.original<span class="hljs-emphasis">_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

<span class="hljs-header">mysql> select * from product;
+----+--------+----------------+--------+
<span class="hljs-header">| 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 |
<span class="hljs-header">|  5 | 钱包   |         195.00 | 285.00 |
+----+--------+----------------+--------+
5 rows in set (0.00 sec)</span></span></span></span></span></span></span></code>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值