MySQLにバッチファイルとかでデータ投入していく時、リレーションを張っている場合は子のテーブルには親テーブルのpkが必要になります。fkの値ですよね。
親テーブルにinsert、新たに発行されたpkの値を変数にいれて、そのまま続けて子テーブルにもinsertしていくサンプル。
久々に書こうとして「あれ?どうやって書いたっけ」って悩んでしまったのでメモしておこう。
insert into oya(body) values(‘hogehoge’);
SET @oya_id = (select last_insert_id() from oya);
insert into ko(oya_id, body) values(@oya_id, ‘ko-hogehoge’);
last_insert_id()ってMySQLだけかも。PostgreSQLとかは確か違う取得の仕方だったと。あ、もちろん各テーブルのpkになるidというカラムはAUTO INCREMENTです。
これを
mysql -u ユーザ名 DB名 < 上記クエリが書かれたファイルへのパス
って実行してやればOKかと。
ちなみにこんなテーブルです。
CREATE TABLE oya(
id int(11) unsigned NOT NULL AUTO_INCREMENT,
body varchar(255) NOT NULL DEFAULT ”,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT DEFAULT CHARSET=utf8;CREATE TABLE ko(
id int(11) unsigned NOT NULL AUTO_INCREMENT,
oya_id int(11) unsigned NOT NULL,
body varchar(255) NOT NULL DEFAULT ”,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT DEFAULT CHARSET=utf8;