ฉันมีคอลัมน์อีเมลที่ฉันต้องการให้เป็นเอกลักษณ์ แต่ฉันต้องการให้มันยอมรับค่าว่าง ฐานข้อมูลของฉันสามารถมีอีเมลที่ไม่มีค่าได้ 2 ฉบับ
ฉันมีคอลัมน์อีเมลที่ฉันต้องการให้เป็นเอกลักษณ์ แต่ฉันต้องการให้มันยอมรับค่าว่าง ฐานข้อมูลของฉันสามารถมีอีเมลที่ไม่มีค่าได้ 2 ฉบับ
คำตอบ:
ใช่ MySQL อนุญาตให้ NULL หลายอันในคอลัมน์มีข้อ จำกัด ที่ไม่เหมือนใคร
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
ผลลัพธ์:
x
NULL
NULL
1
สิ่งนี้ไม่เป็นความจริงสำหรับฐานข้อมูลทั้งหมด ตัวอย่างเช่น SQL Server 2005 และเก่ากว่าอนุญาตให้มีค่า NULL เดียวในคอลัมน์ที่มีข้อ จำกัด ที่ไม่ซ้ำกัน
WHERE column IS NOT NULL
ดูเหมือนจะล้มเหลวฉันเป็นมันไม่ได้รับการสนับสนุนในรุ่นของฉัน MySQL ใครรู้ว่าฉันสามารถดูได้ที่ไหน
จากเอกสาร :
"ดัชนี UNIQUE อนุญาตให้มีค่า NULL หลายค่าสำหรับคอลัมน์ที่สามารถมีค่า NULL"
ฉันไม่แน่ใจว่าในตอนแรกผู้เขียนเพิ่งถามว่าสิ่งนี้อนุญาตให้มีค่าซ้ำกันหรือไม่หากมีคำถามโดยนัยที่นี่ถามว่า "จะอนุญาตNULL
ค่าที่ซ้ำกันในขณะใช้งานได้UNIQUE
อย่างไร" หรือ "จะอนุญาตเพียงหนึ่งUNIQUE
NULL
ค่าได้อย่างไร"
ตอบคำถามแล้วใช่คุณสามารถมีNULL
ค่าซ้ำกันในขณะที่ใช้UNIQUE
ดัชนี
เนื่องจากฉันสะดุดกับคำตอบนี้ในขณะที่ค้นหา "วิธีอนุญาตหนึ่งUNIQUE
NULL
ค่า" สำหรับคนอื่นที่อาจสะดุดกับคำถามนี้ในขณะที่ทำเช่นเดียวกันคำตอบที่เหลือของฉันสำหรับคุณ ...
ใน MySQL คุณไม่สามารถมีUNIQUE
NULL
ค่าหนึ่งค่าได้ แต่คุณสามารถมีUNIQUE
ค่าว่างได้หนึ่งค่าโดยการแทรกด้วยค่าสตริงว่าง
คำเตือน: ตัวเลขและชนิดอื่นที่ไม่ใช่สตริงอาจเป็นค่าเริ่มต้นเป็น 0 หรือค่าเริ่มต้นอื่น
UNIQUE
ข้อ จำกัด แต่เนื่องมาจากNOT NULL
ข้อ จำกัด ฉันคิดว่าคำตอบนี้ไม่เกี่ยวข้องกับคำถามเพราะคำถามนั้นเกี่ยวกับพฤติกรรมของUNIQUE
ข้อ จำกัด
หลีกเลี่ยงข้อ จำกัด ที่ไม่ซ้ำกันแบบ nullable คุณสามารถวางคอลัมน์ในตารางใหม่ทำให้มันไม่เป็นโมฆะและไม่ซ้ำกันแล้วเติมตารางนั้นเฉพาะเมื่อคุณมีค่า สิ่งนี้ทำให้มั่นใจได้ว่าการพึ่งพาคีย์ใด ๆ ในคอลัมน์สามารถบังคับใช้ได้อย่างถูกต้องและหลีกเลี่ยงปัญหาใด ๆ ที่อาจเกิดจากค่า Null