Autor Zpráva
karlo
Profil *
Ahoj, nejde mi do hlavy jedna věc - mám klasickou tabulku v mysql dtb přičemž sloupec id mám jako primární klíč ( chápu-li správně primární klíč jednoznačně identifikuje řádek takže se nemůžu opakovat ) sloupec je typu int a má vlastnost autoincrement - a číselná řada řada ídéček není kompletní.

Řádky z tabulky nemažu a chyby v php si vypisuju do souboru. Ale i pokud by vznikla chyba v php, nemělo by se stát, že by byl řádek přeskočen ne? Buď se hodnota vloží, nebo ne. Je to tak?
Kajman_
Profil *
Může se přeskočit. Ničemu to nevadí. Proč by měl jeden insert váhat, než se druhý rozmyslí, jestli se provede nebo ne? Klidně můžou oba dostat id a buď ho použijí nebo ne. Ale nejsem si jistý, jestli to takhle v mysql je.
_es
Profil
karlo:
Môže sa aj explicitne zadať ľubovolné číslo a ak nie je už obsadené, tak sa použije.
Len ak sa nezadá, tak sa použije číslo o 1 väčšie ako najvyššie použité.
karlo
Profil *
no jo ale když insert dostane číslo a nepoužije ho, tak by to mělo vypsat chybu v php ne? Pokud ten insert neproběhne. Počítám, že insert je vyvolán např. kliknutím na tlačítko, dostane přidělené číslo a jestli se insert provede, číslo se zabere a jestli se neprovede, tak by to mělo vypsat chybu, je to tak?
_es
Profil
karlo:
Chyba nastane na úrovni databázy a ako bude spracovaná ďalej v PHP skripte je už iná vec.
Ak to id nie je zadané, tak by to vloženie záznamu malo asi malo fungovať vždy.
Tá vlastnosť autoincrement má vplyv len vtedy, ak to id zadané nie je (v dotaze insert).
Joker
Profil
karlo:
No ale může to být i takhle:
1. nová prázdná tabulka
2. INSERT s default pro ID -> ID=1
3. INSERT s default pro ID -> ID=2
4. INSERT s ID=10 -> ID=10
5. INSERT s default pro ID -> ID=11

...a vznikne díra, aniž by se nějaký záznam smazal.
karlo
Profil *
Joker: Tento případ to není, vždy je insert s defaultním id.

Je to tak, že lidé vkládají zboží do košíku. Jakmile uživatel klikne, zjistím jestli je v session číslo objednávky a pokud ne, zanesu novou objednávku do tabulky objednávek ( v tomto případě probíhá ten nešťastný insert ) a pak probíhá insert se zbožím do košíku. Pokud by tento do objednávek neproběhl v pořádku, měl bych to poznat v php ( nepodaří se vložit do košíku, nebo vytvořit objednávku ). Nebo to může být tak, že dojde ke kolizi dvou insertů, insert neproběhne napoprvé ( čili číslo objednávky se zabere ale nepoužije ) a aniž by uživatel znovu klikal proběhne druhý pokus o vložení s dalším číslem a do php se vrátí to, že insert proběhl v pořádku?
_es
Profil
karlo:
To vygenerované id z dotazu s insert aj niekde ďalej používaš?
Ako ho chceš zisťovať?
karlo
Profil *
jojo to id je pro mě číslo objednávky. Mám ho uložené v session a po dobu celého nákupu ho pak přiřazuju ke zboží v košíku a pak k ostatním věcem, kde je potřeba identifikovat konkrétní nákup.
_es
Profil
karlo:
Ale musíš nejako zistiť aké to id bolo a nestačí len zistiť poslednú hodnotu, lebo by sa teoreticky mohlo stať, že sa zatiaľ stihne vložiť iný záznam.
A čo ak si návštevník tú objednávku rozmyslí, taký záznam by mal byť potom asi zrušený.
karlo
Profil *
aha jasne - takže správný postup by byl takto? pokud není založena objednávka, vyberu poslední id, zvýším ho o "1" a pokud insert proběhne v pořádku, uložím toto id do session jako číslo objednávky? Pokud ne, znovu vyberu poslední nejvyšší ( pro případ že by proběhl nějaký insert mezitím než vyberu největší a vložím ) zvýším o jednu a pokusím se vložit? Mohlo by to být takto?

Pokud si klient objednávku rozmyslí, měl by se řádek smazat, ale zatím jsem je nemazal.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: