سؤال

لدي جمل SQL هذه:

CREATE TABLE IF NOT EXISTS `culture` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` char(6) NOT NULL DEFAULT 'it',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;


CREATE TABLE IF NOT EXISTS `nations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `culture_id` int(11) NOT NULL,
  `iso_code_2` char(2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `nations_FI_1` (`culture_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=245 ;


CREATE TABLE IF NOT EXISTS `sedi` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;


CREATE TABLE IF NOT EXISTS `sedi_i18n` (
  `id` int(11) NOT NULL,
  `culture` char(6) NOT NULL,
  `nation` char(2) NOT NULL,
  `indirizzo` text NOT NULL,
  PRIMARY KEY (`id`,`culture`),
  KEY `sedi_i18n_FI_2` (`culture`),
  KEY `sedi_i18n_FI_3` (`nation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `sedi_i18n_FK_2` FOREIGN KEY (`culture`) REFERENCES `culture` (`code`),
  ADD CONSTRAINT `sedi_i18n_FK_3` FOREIGN KEY (`nation`) REFERENCES `nations` (`iso_code_2`);

لكنني أحصل على هذا الخطأ:

errore Query SQL:

تغيير الجدول sedi_i18n إضافة القيد sedi_i18n_FK_1 مفتاح غريب ( id ) المراجع sedi ( id ) في حذف سلسلة ، أضف القيد sedi_i18n_FK_2 مفتاح غريب ( culture ) المراجع culture ( code ) ، أضف القيد sedi_i18n_FK_3 مفتاح غريب ( nation ) المراجع nations ( iso_code_2 ) ;

messaggio di mysql:

1005 - لا يمكن إنشاء جدول "test_javier_4.#SQL -528_AED" (Errno: 150)

اي فكرة؟

يعتبر

جافي

هل كانت مفيدة؟

المحلول

المشكلة هي أن 2 من المفاتيح الخارجية الثلاثة تشير إلى الأعمدة في الجدول الأصل والتي ليست مفاتيح أساسية ولا يوجد لديها فهرس فريد عليها.

يجب أن تشير جميع أعمدة المفاتيح الخارجية إلى المفتاح الأساسي أو المفتاح الفريد في الجدول الأصل.

هذان هما المفتاحان الأجنبيان السيئان:

  ADD CONSTRAINT `sedi_i18n_FK_2` FOREIGN KEY (`culture`) REFERENCES `culture` (`code`),
  ADD CONSTRAINT `sedi_i18n_FK_3` FOREIGN KEY (`nation`) REFERENCES `nations` (`iso_code_2`);

إذا كان من المفترض أن تكون هذه الأعمدة فريدة من نوعها في الجدول الأصل ، فيمكنك حل ذلك عن طريق إضافة فهارس فريدة من نوعها مثل هذا:

alter table `culture`
  add unique key (`code`);

alter table `nations`
  add unique key (`iso_code_2`);

نصائح أخرى

من وثائق MySQL:

1005 (er_cant_create_table)

لا يمكن إنشاء جدول. إذا كانت رسالة الخطأ تشير إلى الخطأ 150 ، فقد فشل إنشاء الجدول بسبب عدم تشكيل قيود المفتاح الخارجي بشكل صحيح.

هل يمكنك عزل أي من الإضافات الثلاثة لقيود المفاتيح الخارجية التي تسبب الخطأ ، من خلال تشغيلها في وقت واحد؟ مثل:

ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top