mysql 实现互换表中两列数据方法简单实例
由于最近项目,有这样一个需求,是把数据库中的两列数据互换,经过好久才搞定,这里写个简单实例,做过记录。
1.创建表及记录用于测试
CREATETABLE`product`( `id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'产品id', `name`varchar(50)NOTNULLCOMMENT'产品名称', `original_price`decimal(5,2)unsignedNOTNULLCOMMENT'原价', `price`decimal(5,2)unsignedNOTNULLCOMMENT'现价', PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8; INSERTINTO`product`(`id`,`name`,`original_price`,`price`)VALUES (NULL,'雪糕','5','3.5'), (NULL,'鲜花','18','15'), (NULL,'甜点','25','12.5'), (NULL,'玩具','55','45'), (NULL,'钱包','285','195');
mysql>select*fromproduct; +----+--------+----------------+--------+ |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| +----+--------+----------------+--------+ 5rowsinset(0.00sec)
2.互换original_price与price的值
新手可能会使用以下方法进行互换
updateproductsetoriginal_price=price,price=original_price;
但这样执行的结果只会使original_price与price的值都是price的值,因为update有顺序的,
先执行original_price=price,original_price的值已经更新为price,
然后执行price=original_price,这里相当于没有更新。
执行结果:
mysql>select*fromproduct; +----+--------+----------------+--------+ |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| +----+--------+----------------+--------+ 5rowsinset(0.00sec) mysql>updateproductsetoriginal_price=price,price=original_price; QueryOK,5rowsaffected(0.00sec) Rowsmatched:5Changed:5Warnings:0 mysql>select*fromproduct; +----+--------+----------------+--------+ |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| +----+--------+----------------+--------+ 5rowsinset(0.00sec)
正确的互换方法如下:
updateproductasa,productasbseta.original_price=b.price,a.price=b.original_pricewherea.id=b.id;
执行结果:
mysql>select*fromproduct;
+----+--------+----------------+--------+
|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|
+----+--------+----------------+--------+
5rowsinset(0.00sec)
mysql>updateproductasa,productasbseta.original_price=b.price,a.price=b.original_pricewherea.id=b.id;
QueryOK,5rowsaffected(0.01sec)
Rowsmatched:5 Changed:5 Warnings:0
mysql>select*fromproduct;
+----+--------+----------------+--------+
|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|
+----+--------+----------------+--------+
5rowsinset(0.00sec)
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!