[SQL] insert insolite


(Sensorario) #1

Questo post non riguarda Yii. Però vorrei sottoporvi un problema che ogni tanto mi capita. Mi capita, lavorando su vecchi database, di avere il campo chiave "id" e di non avere la possibilità di usare la proprietà auto_increment.

Normalmente faccio una query che recupera il max di un id del tipo


select max(id) from SourceMessage

a quel punto posso fare una insert del tipo


insert into Message values (<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />,'en','Contacts');

.

Questa operazione si può fare in un passaggio unico:


insert into Message values ((select max(id) from SourceMessage),'en','Contacts')

Spero vi possa essere utile qualora dobbiate mettere mano al database direttamente come nel mio caso.


(Maurizio Domba Cerin) #2

non dovrebbe esserci max(id) + 1 ?


(Matteo Falsitta) #3

Ottima idea, facendo tutto in una sola query evita eventuali conflitti tra 2 richieste contemporanee.


(Sensorario) #4

Di fatto SourceMessage ha un id univoco mentre SourceMessage ha una superchiave che è composta dall’id di SourceMessage più la lingua. Ecco perchè non ho inserito il + 1.

Se volessi, quindi, inserire un incrementale in una tabella che non ha un campo increment, dovrei usare il max(id) +1 esattamente come hai indicato tu.