Ho 2 tabelle, table_a e table_b.MySQL INSERT o 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
Vorrei INSERIRE MASSA nella tabella B con un valore ref_a riferimento alla ID della tabella A.
Questo è quello che sto cercando di realizzare:
SELECT ID FROM table_a WHERE val = "123"
Se il valore non esiste, quindi inserire il valore
INSERT INTO table_a(val) VALUES("123")
Ora che ho ottenuto l'ID (assumere è "1"), voglio inserire int o table_b:
INSERT INTO table_b(ref_a, data) VALUES(1, 75)
Il problema arriva quando voglio farlo alla rinfusa. La mia prestazione peggiorerà se si alternano tra SELEZIONA e INSERTI invece di eseguire un inserimento di massa, quindi selezionare in blocco?
che potevo fare:
INSERT INTO table_b(ref_a, data) VALUES((SELECT ID FROM table_a WHERE value="123"), 75)
ma, cosa succede se il valore non è presente e ho bisogno di fare un inserto prima.
Non riesco a COMINCIARE A TRANSACTION e COMMIT dando che è necessario recuperare l'ID della tabella A dopo un inserimento.
posso anche fare:
- Inserimento di massa nella tabella A.
- Seleziona tutti gli ID dalla tabella A.
- inserire dati nella tabella B con gli ID selezionati.
Ma sto cercando un modo alternativo.
Quale sarebbe il modo più efficiente per realizzare ciò che sto cercando di fare?
Da dove provengono questi valori ('123',' 75')? Un altro tavolo? Un applicazione? Un file? –
È un campo "a.ID" univoco e un campo di incremento automatico? I valori – SenorAmor
123, 75 provengono da un'altra tabella - ho accesso a quei valori. a.ID è univoco, incremento automatico sì – nick