外部変数として自動インクリメントSQL変数を使用したいと思います。コードはPython/SQLで書かれています(これを言う正しい方法は何ですか?) しかし、実際の数値を入れない限り、私は外部キー制約エラーを受け取ります。AutoIncrement変数を外部キーとして使用 - 外部キーを取得するcontraintエラー
私はこれらのエラーに関する複数の記事を読み、情報を使用しようとしている...ここで
は私の二つのテーブルです。表1は上部、表2は下部です。 IDは外部キーです。 私はエラーを防ぐためにコードに1を入れました。
+----+------+-------+
| 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 |
+-----+------+-------+----+
そして、ここでFOREIGN KEY(ID)とREFERENCESの間にカンマ(表2)を入れてthing-コード
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)
つ以上あるエラーが発生します。 ??
編集:私の質問ははっきりしないと思います。私が欲しいのは表1にtable2の
`ID` integer NOT NULL,
FOREIGN KEY (ID)
参照
`ID` integer NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
編集に 'ID' を作ることです。 LAST_INSERT_ID()単一の行を挿入するために動作します。 MySQL documentationには、複数行の使用方法が記載されています。 テーブル2には複数の行があります。 UPDATEテーブル2 SET ID = LAST_INSERT_ID(ID + 1);
私はこの方法を使用してエラーメッセージがある: は、子行を追加または更新できません:外部キー制約が失敗した(。db
をtable2
、CONSTRAINT table2_ibfk_1
FOREIGN KEY(ID
)table1
(ID
)を参照)
@ダニエルどのようにしましたか? – Tom
あなたの質問は何ですか?どこでエラーが発生していますか? –
行のquery2 = ...、そこに「1」を入れないとエラーが出ます。私はtable1のautoincrementsのIDを参照したいと思います。だから私は外国キーの仕事をするために1の代わりに何を置くべきかを知りたがっている – Tom