Eğer tablodaki verilerin nasıl kullanıldığını biraz dikkatli olmak gerekir. Bu gerçekten kullanıcıların tablo ise, kimliği sütunu işaret FKS ile olası diğer tabloları var. Bu durumda tutmak için seçtiğiniz kimliği kullanmak için bu tabloları güncellemek gerekir.
If it's just a standalone table (no table reference it)
CREATE TEMPORARY TABLE Tmp (ID int);
INSERT INTO Tmp SELECT ID FROM USERS GROUP BY User;
DELETE FROM Users WHERE ID NOT IN (SELECT ID FROM Tmp);
Users table linked from other tables
Diğer tablolar yerine başvurmalıdır tüm eski id ve ilgili yeni kimlikleri tutan bir bağlantı tablo gibi geçici tablolar oluşturun.
CREATE TEMPORARY TABLE Keep (ID int, User varchar(45));
CREATE TEMPORARY TABLE Remove (OldID int, NewID int);
INSERT INTO Keep SELECT ID, User FROM USERS GROUP BY User;
INSERT INTO Remove SELECT u1.ID, u2.ID FROM Users u1 INNER JOIN Keep u2 ON u2.User = u1.User WHERE u1.ID NOT IN (SELECT ID FROM Users GROUP BY User);
Kullanıcıların tabloya başvuruda herhangi tabloları geçmesi ve bunu gibi, seçmiş Yeni benzersiz kimliği işaret onların FK sütunu (muhtemelen UserID denir) güncelleştirmek ...
UPDATE MYTABLE t INNER JOIN Remove r ON t.UserID = r.OldID
SET t.UserID = r.NewID;
Son olarak kullanıcıların tabloya geri dönmek ve artık başvurulan kaldır çiftleri:
DELETE FROM Users WHERE ID NOT IN (SELECT ID FROM Keep);
Bu Tmp tabloları temizleyin:
DROP TABLE KEEP;
DROP TABLE REMOVE;