» Poradna » Programy

Auto_increment v MySQL

 |   | 

Mám tabulku naplněnou daty. V jednou sloupci byla pomocí auto_increment vytvořena čísla od 1 do x. Dodatečně bych chtěl přidat nový záznam, třeba na 10. pozici. Dělám to tak, že nejprve zruším ten auto_increment. Pak zvětším čísla > 9 o nějaké hodně vysoké číslo. Potom přidám onen záznam s pozicí 10. Pak ta zvětšená čísla zase zmenším, aby to začínalo číslem 11.
Nešlo by to udělat nějakým jednodušším způsobem???

Odpovědi na otázku

 |   | 

nemusis ty cisla >9 zvyzovat o nejake velke cislo ale staci o 1, pak tam vlozis ten radek s cislem 10. jo a mezitim nemusis auto_increment nijak zrusit

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

svata pravda

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Když dám zvýšit o 1, tak mi to hned začne hlásit výskyt duplicity, protože se to provádí postupně, směrem odshora dolů.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Nedělej takové krkolomnosti, časem se ti vymstí. V databázích SQL není pořadí (pozice) vět významné a podle toho s větami zacházej. Autoincrement je určeno pro generování jednoznačných (unique) indexů a vazby na jiné tabulky. Na nic jiného to nepoužívej, je to cesta do pekla.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Jeětě dál:
V čem spočívá ta cesta do pekla? Protože Autoinc pole je určeno pro vazby na jinou tabulku. Představ si tabulku faktur a tabulku Adresář, kde bude Autoinc pole jako primární index. Do tabulky faktur vložíš ten index z adresáře a když takto vecpeš násilím větu dovnitř tabulky (fyzicky bude stejně na konci), všechny vazby na další indexy se ti v souboru faktur zničí (budou ukazovat na jinou adresu, než mají). Potřebné pořadí vět si zajisti vždy příkazem SELECT vhodným seřazením.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Proč používám auto_increment: v tabulce mám seznam zboží, které se má objevit na webové stránce. Pořadí zboží je takové jako v tabulce. Časem se ale stane, že přijde nějaký nový druh zboží, který chci umístit někam na začátek, třeba na 10. místo. Musím tedy ve stávající tabulce vytvořit nový sloupec, který nazvu třeba "poradi". A samozřejmě chci, aby v něm byla čísla se vzestupnou tendencí. No a nakonec chci toto pořadí nepatrně změnit - jednu položku přesunout na jiné místo.
Jestli existuje nějaký jednodušší způsob, tak se rád poučím.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

no co tak ctu, zahod ten tvuj datovej model a nech nekoho kdo to umi udelat novej.
vyhoda db, je ze to tam muzes mit nahazeno RELATIVNE bez ladu a skladu a rozumnym dotazem si vybrat to co chces a seradit to tak jak chces.
moc tomu sice nerozumim jak to mas, ale jestli to chapu aspon trosku dobre, tak to mas dost sprasene.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Neřekl bych, že to mám sprasené. Prostě mám tabulku v ní data. V čem mám pochybnosti, je pouze ten můj postup, když chci přidat nový záznam. Chci prostě jen vědět, jestli to jde udělat jednodušším způsobem. Třeba nějakým příkazem, který neznám...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Nejde to udělat žádným jednodušším způsobem, neexistuje na to žádný příkaz. Z jednoduchého důvodu: Takhle se to prostě nedělá. Nechci tě nijak prudit, ale máš to špatně navržené. Zboží v I-Net prodejně by mělo být abecedně seřazené třeba podle názvu, výrobce, druhu zboží atd. (nejlépe aby si zákazník mohl řazení vybrat) a ne podle toho, jak se ti zlíbí. Zákazník pak místo aby zboží co potřebuje rychle našel, bude mocně klejt. Abecední řazení pohodlně zajistí příkaz SELECT.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Pokud trváš na řazení podle pořadí, tak se to dá udělat jednoduše - v tabulce zboží nechat autoinkrementální sloupec(a neměnit ho) a vytvořit druhou tabulku se dvěma sloupci, kde první bude odkaz na identifikátor zboží(autoinkrementální sloupec) a druhý bude zobrazované pořadí(klidně se dá například defaultní hodnota identifikátor * 1000). Pak to lze jednoduše řadit SELECTEM a druhá tabulka tak funguje jako čísla řádků v BASICu(pro pamětníky).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Na specifickém řazení netrvám já, ale člověk, pro kterého to dělám. A z obchodního hlediska i docela dobře chápu, že nové zboží chce umístit někam dopředu...
Takováto změna ovšem přijde opravdu jen jednou za čas. Takže dělat kvůli tomu 2 tabulky se mi zdá trochu zbytečné a možná ještě složitější, než ten můj způsob. Tabulku upravuji přímo v PhpMyAdmin. Teď mě napadá, že možná ještě rychlejší by bylo udělat si DUMP, ten v texťáku upravit a celou tabulku nechat udělat znovu...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Sprasené možná ne, ale divné to určitě je. Existují určitá pravidla pro relační DB, která nedodržuješ.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a nebolo by najjednoduchsie pridat novy stlpec kde sa hodnota bude rovnat autoinc field (pre vsetky doteraz existujuce zaznamy) v novych zaznamoch uz mozes dat hodnotu aku sam chces a podla nej to zoradit , zatial co autoincrement ostane nezmeneny?

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Vysoké číslo, Nový záznam




Určitě si přečtěte

Google Cloud Next: Blíží se bitva o to, kdo ovládne cloud, tedy internet zítřka

Google Cloud Next: Blíží se bitva o to, kdo ovládne cloud, tedy internet zítřka

** Google v týdnu ukázal nové telefony Pixel ** V Londýně se ale také konal Google Cloud Next ** Konference o tom, jak bude vypadat internet v cloudu zítra

Jakub Čížek | 32

Nechali jsme dopadnout asteroid Ryugu na Prahu. Místo stověžatého města je pětikilometrový kráter

Nechali jsme dopadnout asteroid Ryugu na Prahu. Místo stověžatého města je pětikilometrový kráter

** Ryugu je blízkozemní planetka, která křižuje dráhu Země ** Její průměr je asi 900 metrů ** Co by se stalo, kdyby Ryugu dopadla na Zemi?

Petr Kubala | 5


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku