我想使用最有效的方法交换 mysql 中的两行。
我当前的代码如下:
CREATE TABLE `user` (
`id` int(11),
`email` varchar(255),
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
);
INSERT INTO `user` VALUES
(1,'john@a.com'),
(2,'fred@b.com');
SET @FROM=2, @TO=1;
SELECT @FROM.email:=email FROM user WHERE id = @FROM;
SELECT @TO.email:=email FROM user WHERE id = @TO;
UPDATE user
SET email=NULL
WHERE id IN (@FROM, @TO);
UPDATE user
SET email=@FROM.email
WHERE id=@TO;
UPDATE user
SET email=@TO.email
WHERE id=@FROM;
你可以在这里看到一个 SQLFiddle 。
有什么方法可以优化此代码以减少其中的查询,当我们处理一个大表(具有 10 多个列/变量)时这样做是否安全(考虑到两条记录都被临时删除)和连接缓慢且可能不稳定?
谢谢你。