0

最も効率的な方法を使用して、mysql で 2 つの行を交換したいと思います。

私の現在のコードは次のとおりです。

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