كيف يمكنني تحديد قيد فريد لأعمدة متعددة في MySQL؟




unique-constraint composite-key (6)

لدي جدول:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

الآن أريد جعل مستخدم الأعمدة والبريد الإلكتروني والعنوان فريدًا (معًا).

كيف أفعل هذا في MySql؟

  • بالطبع المثال هو مجرد ... مثال. لذا من فضلك لا تقلق بشأن الدلالات.

MySql 5 أو أعلى يتصرف مثل هذا (لقد اختبرت للتو):

  • يمكنك تحديد القيود الفريدة التي تنطوي على أعمدة nullable. لنفترض أنك تحدد قيدًا فريدًا (A ، B) حيث A غير قابل للبلوغ ولكن B هو
  • عند تقييم مثل هذا القيد ، يمكنك الحصول على (A، null) كم عدد المرات التي تريدها (نفس القيمة A!)
  • يمكنك فقط الحصول على زوج واحد (A ، لا ب)

مثال: PRODUCT_NAME ، PRODUCT_VERSION 'glass' ، null 'glass'، null 'wine'، 1

الآن إذا كنت تحاول إدراج ("النبيذ" 1) مرة أخرى فإنه سيتم الإبلاغ عن انتهاك القيد نأمل أن يساعد هذا


إذا كنت ترغب في تجنب التكرارات في المستقبل. إنشاء عمود آخر يقول id2.

UPDATE tablename SET id2 = id;

الآن أضف الفريدة على عمودين:

alter table tablename add unique index(columnname, id2);

لا تعمل الفهارس الفريدة متعددة الأعمدة في MySQL إذا كان لديك قيمة NULL في صف حيث يعامل MySQL قيمة خالية (NULL) كقيمة فريدة ، وعلى الأقل ليس لدى المنطق حاليًا أي منطق للعمل حولها في فهارس متعددة الأعمدة. نعم ، السلوك مجنون ، لأنه يحد من الكثير من التطبيقات الشرعية للمؤشرات متعددة الأعمدة ، لكنه ما هو عليه ... حتى الآن ، إنه خطأ تم ختمه بـ "لن يصلح" على MySQL علة المسار ...


لدي جدول MySQL:

CREATE TABLE `content_html` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_box_elements` int(11) DEFAULT NULL,
  `id_router` int(11) DEFAULT NULL,
  `content` mediumtext COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);

و UNIQUE KEY يعمل كما هو متوقع ، فإنه يسمح بفرص NULL متعددة من id_box_elements و id_router.

أقوم بتشغيل MySQL 5.1.42 ، لذا ربما كان هناك بعض التحديث حول المشكلة التي تمت مناقشتها أعلاه. لحسن الحظ أنه يعمل ، ونأمل أن يبقى على هذا النحو.


هل جربت هذا ؟

UNIQUE KEY `thekey` (`user`,`email`,`address`)

يمكنك إضافة فهارس فريدة متعددة الأعمدة عبر phpMyAdmin . (اختبرت في الإصدار 4.0.4)

انتقل إلى صفحة البنية لجدولك المستهدف. إضافة فهرس فريد إلى أحد الأعمدة. قم بتوسيع قائمة الفهرس في أسفل صفحة البنية لمعرفة الفهرس الفريد الذي أضفته للتو. انقر على رمز التعديل ، وفي مربع الحوار التالي ، يمكنك إضافة أعمدة إضافية إلى هذا الفهرس الفريد.





database-table