Προσπαθώ να προωθήσω το νέο μου σχήμα στον διακομιστή db μου, αλλά δεν μπορώ να καταλάβω γιατί λαμβάνω αυτό το σφάλμα. Προσπάθησα να ψάξω για την απάντηση εδώ, αλλά όλα όσα βρήκα είπαν είτε να ορίσω τη μηχανή db σε Innodb είτε να βεβαιωθώ ότι τα κλειδιά που προσπαθώ να χρησιμοποιήσω ως ξένο κλειδί είναι πρωτεύοντα κλειδιά στους δικούς τους πίνακες. Έχω κάνει και τα δύο αυτά πράγματα, αν δεν κάνω λάθος. Υπάρχει κάποια άλλη βοήθεια που θα μπορούσατε να προσφέρετε;
Executing SQL script in server
ERROR: Error 1215: Cannot add foreign key constraint
-- -----------------------------------------------------
-- Table `Alternative_Pathways`.`Clients_has_Staff`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` (
`Clients_Case_Number` INT NOT NULL ,
`Staff_Emp_ID` INT NOT NULL ,
PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) ,
INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) ,
INDEX `fk_Clients_has_Staff_Clients_idx` (`Clients_Case_Number` ASC) ,
CONSTRAINT `fk_Clients_has_Staff_Clients`
FOREIGN KEY (`Clients_Case_Number` )
REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Clients_has_Staff_Staff1`
FOREIGN KEY (`Staff_Emp_ID` )
REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
Η εκτέλεση του σεναρίου SQL ολοκληρώθηκε: δηλώσεις: 7 πέτυχαν, 1 απέτυχε
Ακολουθεί η SQL για τους μητρικούς πίνακες.
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients` (
`Case_Number` INT NOT NULL ,
`First_Name` CHAR(10) NULL ,
`Middle_Name` CHAR(10) NULL ,
`Last_Name` CHAR(10) NULL ,
`Address` CHAR(50) NULL ,
`Phone_Number` INT(10) NULL ,
PRIMARY KEY (`Case_Number`) )
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Staff` (
`Emp_ID` INT NOT NULL ,
`First_Name` CHAR(10) NULL ,
`Middle_Name` CHAR(10) NULL ,
`Last_Name` CHAR(10) NULL ,
PRIMARY KEY (`Emp_ID`) )
ENGINE = InnoDB
Υποθέτω ότι το Clients.Case_Number
και/ή το Staff.Emp_ID
δεν είναι ακριβώς ο ίδιος τύπος δεδομένων με το Clients_has_Staff.Clients_Case_Number
και το Clients_has_Staff.Staff_Emp_ID
.
Ίσως οι στήλες στους μητρικούς πίνακες είναι INT UNSIGNED
;
Πρέπει να έχουν ακριβώς τον ίδιο τύπο δεδομένων και στους δύο πίνακες.
Λόγοι για τους οποίους μπορεί να λάβετε σφάλμα περιορισμού ξένου κλειδιού:
Επικαιροποίηση:
ON DELETE SET NULL
δεν έχει οριστεί να είναι null. Βεβαιωθείτε λοιπόν ότι η στήλη έχει οριστεί ως προεπιλεγμένη null.Ελέγξτε αυτά.