سؤال

لسبب ما ، فشل هذا mysql:

CREATE SCHEMA IF NOT EXISTS `partB` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `partB`;

CREATE TABLE Employees ( ssn CHAR(11),
Name CHAR(30),
mlot INTEGER,
PRIMARY KEY(ssn))
ENGINE = InnoDB;

CREATE TABLE Dept_Mgr ( did INTEGER,
dname CHAR(20),
ssn CHAR(11) NOT NULL,
PRIMARY KEY (did),
FOREIGN KEY (ssn) REFERENCES Employees
ON DELETE NO ACTION)
ENGINE = InnoDB;

يعطي الخطأ:

خطأ 1005 (HY000): لا يمكن إنشاء جدول partb.dept_mgr (Errno: 150)

ما الذي قد يكون سببا لهذا؟

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

المحلول

هذا الأمر:

SHOW ENGINE INNODB STATUS;

هل صديقك عندما تواجه مشكلة في إنشاء مفاتيح أجنبية. الإخراج (مختصر)

------------------------
LATEST FOREIGN KEY ERROR
------------------------
100225  2:51:42 Error in foreign key constraint of table test/dept_mgr:
FOREIGN KEY (ssn) REFERENCES Employees
ON DELETE NO ACTION)
ENGINE = InnoDB:
Syntax error close to:

ON DELETE NO ACTION)
ENGINE = InnoDB

إذا قمت بتغيير بيانك إلى:

CREATE TABLE Dept_Mgr ( 
    did INTEGER,
    dname CHAR(20),
    ssn CHAR(11) NOT NULL,
    PRIMARY KEY (did),
    FOREIGN KEY (ssn) REFERENCES Employees(ssn)
) engine = innodb;

انها تقوم بالعمل.

نصائح أخرى

يجب عليك تحديد العمود (العمود) في الجدول الأجنبي للمفتاح:

FOREIGN KEY (ssn) REFERENCES Employees (ssn) ...

لديك فقط المفتاح الخارجي يشير إلى الجدول ، وليس العمود.

جرب: مراجع الموظف. ssn

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top