ตกลงฉันรู้ว่าฉันเคยทำมาก่อน แต่ฉันไม่สามารถคิดออกมาได้ ฉันสร้างตาราง หนึ่งในคอลัมน์นั้นมีป้ายกำกับ "LogID" ซึ่งเป็นคีย์หลักด้วย
ฉันจะแก้ไขเพื่อให้คอลัมน์นี้สร้าง UUID สำหรับแต่ละรายการใหม่ได้อย่างไร
ขอบคุณ
ตกลงฉันรู้ว่าฉันเคยทำมาก่อน แต่ฉันไม่สามารถคิดออกมาได้ ฉันสร้างตาราง หนึ่งในคอลัมน์นั้นมีป้ายกำกับ "LogID" ซึ่งเป็นคีย์หลักด้วย
ฉันจะแก้ไขเพื่อให้คอลัมน์นี้สร้าง UUID สำหรับแต่ละรายการใหม่ได้อย่างไร
ขอบคุณ
คำตอบ:
เพียงแค่สร้างทริกเกอร์ให้ทำงานก่อนที่จะแทรกเพื่อสร้าง UUID สำหรับคอลัมน์ที่กำหนด
CREATE TRIGGER before_insert_mytable
BEFORE INSERT ON mytable
FOR EACH ROW
SET new.LogID = uuid();
UUID ()แสดงออกสร้าง UUID เมื่อเรียกว่า
น่าเสียดายที่ (AFAIK อยู่ดี) MySQL จะไม่อนุญาตให้ใช้นิพจน์เป็นค่าเริ่มต้นสำหรับเขตข้อมูล ในการหลีกเลี่ยงคุณสามารถตั้งค่าเขตข้อมูลเป็นค่าเริ่มต้นว่างและมีทริกเกอร์ที่ปรับปรุงเขตข้อมูลด้วยการแทรก UUID
ฉันค่อนข้างมั่นใจว่าคุณยังทำไม่ได้จริง ๆ ฉันอย่างจริงจังจะพิจารณาไม่ใช้ UUID เป็นคีย์หลักแทนที่จะใช้ slimmer, INT
ชนิดของข้อมูลที่ดีกว่าเช่น คุณสามารถเพิ่ม UUID ของคุณเป็นคอลัมน์แยกต่างหากและอัปเดตผ่าน a TRIGGER
หากเหมาะสมกับคุณ
SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))
= 16 ไบต์ไบนารี่ ยังคงใหญ่กว่าINT
แต่ก็ดีกว่าVARCHAR(36)
ฉันเพิ่งตัดสินใจรวมคำสั่ง UUID () ไว้ในส่วนแทรกจากแอปพลิเคชันของฉัน
ขอบคุณทุกคน