[ mish_ns @ 21.11.2011. 11:01 ] @
Pozdrav svima.

Interesuje me kako mogu kombinovati insert i select komande a da pri tome podaci koji se upisuju nisu već u tabeli.
Evo primer.
Imam tabelu postanski_broj i polja id,mesto, broj
id mesto broj
1 Novi Sad 21000
2 Beograd 11000

E sad kad upisujem recimo slog id=3
insert into postanski_brojevi select max(id)+1, 'Niš', 18000 from postanski_brojevi
Interesuje me kako ispitati pre upisa da slog Niš ili 18000 nije prethodno upisan???
Pokušavao sam sa where not exists ali mi nešto ne ide.
[ djoka_l @ 21.11.2011. 11:31 ] @
Code (sql):

INSERT INTO postanski_broj (id, mesto, broj)
   SELECT MAX(id)+1, 'Niš', '18000'
   FROM postanski_broj
   WHERE NOT EXISTS (SELECT * FROM postanski_broj WHERE mesto = 'Niš' OR broj = '18000')
 
[ mish_ns @ 21.11.2011. 11:49 ] @
Probavao sam i tako ali mi javlja gresku:
Column 'id' cannot be null

Ovo bi trebalo ustvari da znaci da slog postoji u tabeli?



[Ovu poruku je menjao mish_ns dana 21.11.2011. u 13:08 GMT+1]
[ Nikola Poša @ 21.11.2011. 17:29 ] @
A što pre svega ne bi tu kolonu "id" postavio na AUTO_INCREMENT, a onda i neki UNIQUE indeks na kolone "mesto" i "broj"?
[ mish_ns @ 22.11.2011. 06:22 ] @
Da...
Id može da bude, ali i ne mora biti auto-increment...pošto sam planirao da svrednosti idu od 100,200,300 i sl.
Što se tiče unique, potpuno si u pravu.

HVALA
[ mish_ns @ 22.11.2011. 13:44 ] @
Pozdrav evo probavao sam da stavim i id autoincremnet.
Međutim javlja se problem kod insert-a. Ako imam već neko mesto ili broj unet javlja Duplicate key... sto je uredu ali se istovremeno autoincrement uvecava.
Da li ima neki nacin da se to zabrani ili je bolje rucno uvecavati vrednost polja?

StoredProcedurom može, ali da li može jednim upitom?
[ mish_ns @ 22.11.2011. 17:14 ] @
Video sam sad na netu da ima promenljiva
innodb_autoinc_lock_mode

Kad je postavim na nulu i kada Insert komanda ne uspe onda se i ne uvećava autoincrement polje.