ฉันมีคอลัมน์อีเมลที่ฉันต้องการให้เป็นเอกลักษณ์ แต่ฉันต้องการให้มันยอมรับค่าว่าง ฐานข้อมูลของฉันสามารถมีอีเมลที่ไม่มีค่าได้ 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