mysql 主键互换_在MySQL中交换列值

小编典典

我只需要处理相同的问题,然后我将总结我的发现。

该UPDATE table SET X=Y, Y=X方法显然行不通,因为它将两个值都设置为Y。

这是使用临时变量的方法。感谢http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/的注释中的“ IS NOT NULL”调整。没有它,查询将无法正常工作。请参阅文章末尾的表架构。如果其中一个为NULL,则此方法不交换值。使用没有此限制的方法#3。

UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;

UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;

我想出的另一种方法似乎可行:

UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE

s1.id=s2.id;

本质上,第一个表是要更新的表,第二个表是用于从中提取旧数据的表。

请注意,此方法要求显示主键。

这是我的测试架构:

CREATE TABLE `swap_test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`x` varchar(255) DEFAULT NULL,

`y` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

INSERT INTO `swap_test` VALUES ('1', 'a', '10');

INSERT INTO `swap_test` VALUES ('2', NULL, '20');

INSERT INTO `swap_test` VALUES ('3', 'c', NULL);

2020-05-17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值