MySQL: لماذا لا يعمل نص إنشاء DB هذا؟
-
22-09-2019 - |
سؤال
لسبب ما ، فشل هذا 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
لا تنتمي إلى StackOverflow