كيف يمكنني تحديد قيد فريد على أعمدة متعددة في الخلية ؟

StackOverflow https://stackoverflow.com/questions/635937

سؤال

لدي جدول:

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

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

كيف أفعل هذا في الخلية ؟

  • طبعا المثال فقط...على سبيل المثال.لذلك من فضلك لا تقلق بشأن دلالات.
هل كانت مفيدة؟

المحلول

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

نصائح أخرى

لدي جدول 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`)
);

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

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

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

هل جربت هذا ؟

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

يعمل هذا مع إصدار MySQL 5.5.32

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

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

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

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

  • يمكنك تحديد قيود فريدة تشمل nullable الأعمدة.أقول لك تحديد القيد فريدة من نوعها (A, B) حيث لا nullable ولكن ب
  • عند تقييم هذا القيد يمكن أن يكون (أ, null) عدة مرات تريد (نفس قيمة!)
  • هل يمكن أن يكون واحد فقط (A, not null ب) زوج

على سبيل المثال:اسم_المنتج, PRODUCT_VERSION 'زجاج', null 'زجاج', null 'الخمر', 1

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

أفعل ذلك مثل هذا:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

اتفاقيتي فريدة من نوعها index_name يكون TableName_Column1_Column2_Column3_uindex.

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

UPDATE tablename SET id2 = id;

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

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

لإضافة فهرس فريد مطلوب ما يلي:

1) اسم الجدول
2) اسم_الفهرس
3) الأعمدة التي تريد إضافة الفهرس عليها

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

في حالتك يمكننا إنشاء فهرس فريد على النحو التالي:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

إذا كنت تقوم بإنشاء جدول في MySQL فاستخدم ما يلي:

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top