私は2つのテーブルtable_aとtable_bを持っています。MySQL INSERTまたはSELECT
SELECT ID FROM table_a WHERE val = "123"
値は、If:
CREATE TABLE `table_a` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`val` varchar(64) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `val` (`val`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE `table_b` (
`ref_a` int(11) unsigned NOT NULL,
`data` int(11) unsigned NOT NULL,
UNIQUE KEY `unique_index` (`ref_a`,`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
私は
これは私が達成しようとしているものですMASS REF_A値が表AのIDを参照して表Bに挿入したいと思います存在しない場合は、値を挿入してください。
INSERT INTO table_a(val) VALUES("123")
IDを取得したので、 o table_b:
INSERT INTO table_b(ref_a, data) VALUES(1, 75)
私は一括してやりたいときに問題が発生します。 一括挿入を実行する代わりにSELECTSとINSERTの間を交互に切り替え、一括選択するとパフォーマンスが低下しますか?
私が行うことができます:
INSERT INTO table_b(ref_a, data) VALUES((SELECT ID FROM table_a WHERE value="123"), 75)
をしかし、値が欠落していると私は前に挿入を行う必要がある場合はどのような。
私はBEGIN TRANSACTIONとCOMMITを使用して、挿入後にテーブルAのIDを取得する必要があります。
は私も行うことができます。
- バルク
- が選択されたIDを使用して、テーブルBに挿入し、テーブルAからすべてのIDを選択して、テーブルA.
- に挿入します。
しかし、私は代わりの方法を探しています。
私がやろうとしていることを達成するのに、最も効果的な方法は何でしょうか?
これらの値(「123」、「75」)はどこから来ますか?別のテーブル?アプリケーション?ファイル? –
'a.ID'は一意で、自動増分フィールドですか? – SenorAmor
値123,75は別のテーブルから来たものです。これらの値にアクセスできます。 a.IDはユニークで、自動インクリメントあり – nick