MySQL對表重復數據刪
第一步:查找重復數據
要刪除表中的重復數據,首先需要找到它們。MySQL提供了DUPILCATE關鍵字和GROUP BY語句來幫助我們查找重復數據。例如,以下SQL語句可以查詢students表中的重復記錄:
SELECT name, COUNT(*) FROM students GROUP BY name HAVING COUNT(*) >1;
第二步:刪除重復數據
一旦找到了重復記錄,就可以使用DELETE語句刪除它們。在這個例子中,我們要確保只有重復的記錄被刪除,因此我們要使用子查詢。以下是刪除students表中重復姓名的記錄的SQL語句:
DELETE FROM students WHERE name IN (SELECT name FROM (SELECT name, COUNT(*) FROM students GROUP BY name HAVING COUNT(*) >1) s);
第三步:設置唯一性約束
如果我們不想讓表中出現重復的數據,可以在表結構中添加唯一性約束。以下是將唯一性約束添加到students表的name字段的SQL語句:
ALTER TABLE students ADD CONSTRAINT uc_name UNIQUE (name);
第四步:插入數據時自動刪除重復數據
在設置唯一性約束之后,如果我們嘗試向表中插入重復數據,MySQL將自動刪除它們。以下是向students表插入數據的SQL語句,它包括一些重復的姓名:
INSERT INTO students (name, age, gender) VALUES ('Tom', 18, 'M'), ('Jerry', 17, 'F'), ('Tom', 18, 'M'), ('Lucy', 19, 'F');
上面的SQL語句將插入三條記錄,但由于重復姓名的數據已經存在于表中,MySQL只會插入兩條記錄。如果我們再次查詢students表,將看到從表中刪除了所有的重復數據:
SELECT * FROM students;