0

我想使用最有效的方法交换 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 多个列/变量)时这样做是否安全(考虑到两条记录都被临时删除)和连接缓慢且可能不稳定?

谢谢你。

4

1 回答 1

0

1- 如果表是 InnoDB,则使用事务 2- 您可能希望使用具有相同结构的临时表,除了唯一约束,并使用它来交换值,然后更新原始表。

于 2013-07-03T21:46:41.093 回答