MySQL - สร้างฟิลด์ที่ไม่ซ้ำใคร


155

ฉันมีตารางที่มีอยู่แล้วพร้อมกับเขตข้อมูลที่ควรไม่ซ้ำกัน แต่ไม่ใช่ ฉันรู้เรื่องนี้เพียงเพราะมีการป้อนข้อมูลลงในตารางที่มีค่าเหมือนกันกับรายการอื่นที่มีอยู่แล้วรายการและสิ่งนี้ทำให้เกิดปัญหา

ฉันจะทำให้ฟิลด์นี้ยอมรับค่าที่ไม่ซ้ำได้อย่างไร

คำตอบ:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

สำหรับ MySQL 5.7.4 หรือใหม่กว่า:

ALTER TABLE mytbl ADD UNIQUE (columnName);

ในฐานะของ MySQL 5.7.4 ส่วนคำสั่ง IGNORE สำหรับ ALTER TABLE จะถูกลบออกและการใช้งานจะทำให้เกิดข้อผิดพลาด

ดังนั้นตรวจสอบให้แน่ใจว่าได้ลบรายการที่ซ้ำกันออกก่อนเนื่องจากไม่สนับสนุนคำหลัก IGNORE อีกต่อไป

การอ้างอิง


62
If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. เอกสาร
The Scrum Meister

1
มีวิธีบอกให้ลบแถวตามเกณฑ์ที่กำหนดหรือไม่ หรือคุณจะต้องทำการประมวลผลล่วงหน้าก่อนที่ALTERจะทำสิ่งนี้ให้สำเร็จ
corsiKa

7
ALTER IGNOREอาจยังให้ข้อผิดพลาดซ้ำในรุ่น MySQL> 5.5 และใน InnoDB เพื่อความปลอดภัยของข้อมูลของคุณ set session old_alter_table=1ถ้าคุณเป็นเพียงให้แน่ใจว่าการรักษาครั้งแรกของแถวที่ซ้ำกันเป็นสิ่งที่ถูกต้องลอง อย่าลืมตั้งกลับ mysqlolyk.wordpress.com/2012/02/18/…
michaelliu

2
สำหรับใครก็ตามที่สะดุดกับสิ่งนี้โดยใช้ 5.6.7 ขึ้นไป IGNORE จะไม่ได้รับการสนับสนุนอีกต่อไป moredocsฉันเดาวิธีที่จะทำตอนนี้คือเพื่อให้แน่ใจว่าคุณไม่ได้ซ้ำกันก่อนใช่มั้ย
William T. Mallard

1
อย่าลืมทำสำเนาสำรองของตารางก่อนที่จะเรียกใช้แบบสอบถามนี้ มันจะลบแถวทั้งหมดยกเว้นแถวแรกถ้าคอลัมน์มีค่าเดียวกันหรือว่างเปล่า
steady_daddy


16

หากคุณต้องการตั้งชื่อข้อ จำกัด ให้ใช้สิ่งนี้:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

คุณต้องลบค่าที่ซ้ำกันในคอลัมน์นั้นก่อนดำเนินการ sql นั้น ค่าซ้ำที่มีอยู่ในคอลัมน์นั้นจะนำคุณไปสู่ข้อผิดพลาด mysql 1062


4

วิธีที่ง่ายและเร็วที่สุดคือตาราง phpmyadmin

ใช้ PHPMYADMIN แผงผู้ดูแลระบบ!

มีเป็นภาษารัสเซีย แต่ในเวอร์ชั่นภาษาอังกฤษควรเหมือนกัน เพียงคลิกปุ่มที่ไม่ซ้ำ นอกจากนี้คุณยังสามารถสร้างคอลัมน์หลักหรือลบได้อีกด้วย



1

รหัสนี้คือการแก้ปัญหาของเราในการตั้งค่าคีย์เฉพาะสำหรับตารางที่มีอยู่

alter ignore table ioni_groups add unique (group_name);

แต่ลบรายการที่ซ้ำทั้งหมดรวมถึงที่อยู่นอกคอลัมน์
Biasi Wiga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.