最も効率的な方法を使用して、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 個以上の列/変数を含む) を扱っているときにこれを実行しても安全ですか?遅くて不安定な接続ですか?
ありがとうございました。