Je souhaite utiliser une variable SQL auto-incrémentée en tant que clé étrangère. Le code est écrit en Python/SQL (quelle est la bonne façon de le dire?) Cependant, sauf si je mets un nombre réel, j'obtiens des erreurs de contrainte de clé étrangère.Utilisation de la variable AutoIncrement en tant que clé étrangère - erreur de contrainte de clé étrangère get
J'ai lu plusieurs messages au sujet de ces erreurs et a tenté d'utiliser les informations ...
Voici mes deux tables. Table1 est le haut, Table2 est le bas. ID est la clé étrangère. J'ai mis le numéro 1 dans mon code afin d'éviter les erreurs.
+----+------+-------+
| id | name | class |
+----+------+-------+
| 1 | ONE | TWO |
| 2 | ONE | TWO |
| 3 | ONE | TWO |
| 4 | ONE | TWO |
+----+------+-------+
mysql> select * from table2;
+-----+------+-------+----+
| par | name | class | ID |
+-----+------+-------+----+
| 1 | SSS | CAR | 1 |
| 2 | SSS | CAR | 1 |
+-----+------+-------+----+
Et voici le code
sql= """CREATE TABLE IF NOT EXISTS table1 (
`ID` integer NOT NULL AUTO_INCREMENT,
`name` varchar(30) default NULL,
`class` varchar(20) default NULL,
PRIMARY KEY (`ID`)
)"""
cursor.execute(sql)
sql2 = """CREATE TABLE IF NOT EXISTS table2 (
`par` integer NOT NULL AUTO_INCREMENT,
`name` varchar(30) default NULL,
`class` varchar(20) default NULL,
`ID` integer NOT NULL,
FOREIGN KEY (ID) REFERENCES table1 (ID),
PRIMARY KEY (par)
)"""
cursor.execute(sql2)
query = "INSERT INTO table1 (name, class) VALUES('ONE','TWO')"
cursor.execute(query)
query2 = "INSERT INTO table2 (name, class,ID) VALUES('SSS','CAR',1)"
cursor.execute(query2)
Encore une chose- mettre une virgule (tableau 2) entre FOREIGN KEY (ID) et références donne erreur. ??
edit: Je pense que ma question n'est pas claire. Ce que je veux faire 'ID' dans table2
`ID` integer NOT NULL,
FOREIGN KEY (ID)
référence
`ID` integer NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
dans le tableau 1
modifier: LAST_INSERT_ID() fonctionne pour les insertions de ligne unique. MySQL documentation décrit comment utiliser pour plusieurs lignes. Le tableau 2 comporte plusieurs lignes. UPDATE table2 ID SET = LAST_INSERT_ID (ID + 1);
Le message d'erreur que je reçois cette méthode est: Impossible d'ajouter ou mettre à jour une ligne enfant: (. db
table2
, CONTRAINTE table2_ibfk_1
FOREIGN KEY (ID
) RÉFÉRENCES table1
(ID
)) une contrainte de clé étrangère échoue
@Daniel comment avez-vous fait cela? – Tom
Alors, quelle est votre question? Où avez-vous des erreurs? –
dans la ligne query2 = ..., si je ne mets pas un "1" là, je reçois des erreurs. Je veux référencer l'ID qui s'auto-incruste dans la table1.Donc, je veux savoir ce que je devrais mettre à la place de la 1 afin de faire fonctionner la clé étrangère – Tom