У меня есть 2 таблицы, table_a и table_b.MySQL INSERT или SELECT
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 ВСТАВИТЬ в таблице B со значением ref_a со ссылкой на ID таблицы А.
Это то, что я пытаюсь выполнить:
SELECT ID FROM table_a WHERE val = "123"
Если значение не существует, а затем вставить значение
INSERT INTO table_a(val) VALUES("123")
Теперь, когда я получил идентификатор (предположим, что это «1»), я хочу, чтобы вставить Int o table_b:
INSERT INTO table_b(ref_a, data) VALUES(1, 75)
Проблема возникает, когда я хочу сделать это оптом. Будет ли моя производительность снижаться, если я буду переключаться между SELECTS и INSERTS вместо того, чтобы делать объемную вставку, а затем выбирать маску?
Я мог бы сделать:
INSERT INTO table_b(ref_a, data) VALUES((SELECT ID FROM table_a WHERE value="123"), 75)
, но, что если значение отсутствует, и мне нужно сделать вставку ранее.
Я не могу НАЧАТЬ TRANSACTION и COMMIT, давая мне, чтобы мне нужно получить идентификатор таблицы A после вставки.
Я также могу сделать:
- Bulk вставки в таблицу А.
- Выберите все идентификаторы из таблицы А.
- Вставка в таблицу B, используя выбранные идентификаторы.
Но им нужен альтернативный путь.
Что было бы НАИБОЛЕЕ ЭФФЕКТИВНЫМ способом выполнить то, что я пытаюсь сделать?
Откуда берутся эти значения ('123',' 75')? Еще один стол? Приложение? Файл? –
Является ли 'a.ID' уникальным и поле автоматического приращения? – SenorAmor
значения 123, 75 поступают из другой таблицы - у меня есть доступ к этим значениям. a.ID уникален, auto increment yes – nick