Ceci est le SQL:erreur 1005 (HY000): Impossible de créer la table '...... issue.frm' (errno: 150)
CREATE TABLE user (
userID INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
username VARCHAR(100) NOT NULL,
isAdmin BOOL NOT NULL DEFAULT 0,
canAssignIssue BOOL NOT NULL DEFAULT 0,
canMarkDuplicate BOOL NOT NULL DEFAULT 0,
canProcessIssue BOOL NOT NULL DEFAULT 0
) ENGINE = InnoDB;
CREATE TABLE issue (
issueID INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,
title VARCHAR(100) NOT NULL,
body TEXT NOT NULL,
duplicateOf INTEGER UNSIGNED DEFAULT NULL,
issueDateTime DATETIME NOT NULL,
postBy INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (issueID, postBy, duplicateOf),
INDEX (postBy, duplicateOf),
FOREIGN KEY (duplicateOf) REFERENCES issue (issueID)
ON DELETE SET NULL,
FOREIGN KEY (postBy) REFERENCES user (userID)
ON DELETE SET NULL
) ENGINE = InnoDB;
J'ai reçu ce message d'erreur de la code ci-dessus:
ERROR 1005 (HY000): Can't create table '......\issue.frm' (errno: 150)
Cependant, si je change
FOREIGN KEY (duplicateOf) REFERENCES issue (issueID)
ON DELETE SET NULL,
à
FOREIGN KEY (duplicateOf) REFERENCES issue (issueID)
ON DELETE NO ACTION,
le code fonctionne.
Il est probable que l'ID de problème ne peut pas être NULL. par 'issueID INTEGER UNSIGNED AUTO_INCREMENT NON NULL,'. Les clés étrangères doivent être définies sur des champs identiques. – stslavik
Non, les clés étrangères peuvent être définies comme nul si l'enregistrement parent est supprimé. Ce n'est pas le problème. Le problème est que l'OP essaye de mettre à zéro un champ qui fait partie de la clé primaire, qui par définition ne peut jamais être nul. –