Výsledky 1 až 24 z 24

Téma: [MySQL] AutoIncrement

  1. #1

    Standardní [MySQL] AutoIncrement

    Mám primární klíč v databázi. Je to integer a má nastaven autoincrement. A potřeboval bych zjistit jakou hodnotu bude mít při vložení dalšího záznamu...
    např mám tabulku a v ní data
    id 1.
    id 2.
    id 4.
    id 5.
    id 6.

    ID 3. tam chybí záměrně protože je "jakoby smazaný". Dále je smazaný id 7. Nyní potřebuju vložit další záznam. A potřebuju zjistit že nový záznam bude mít hodnotu id 8. Jak na to ? Počítat jaký je poslední je nesmysl. Protože by mi samozdřejmě vyšlo 7 což potom nebude odpovídat skutečnosti.

    Potřebuju získat hodnotu co píše phpMyAdmin u každé tabulky (ve struktuře). "Další Autoindex". Jak ho mám zjistit poradíte mi nějáký dotaz Podíval bych se do zdrojáku phpMyAdmina, ale něják na to nemám čas.... thx
    HwTips.com

  2. #2

    Standardní

    Proc zjistit uz pred vlozenim ? (ale teoreticky by to taky melo jit) Beznejsi postup je brat hodnotu generovanou po vlozeni:

    insert into ....;
    select LAST_INSERT_ID();

  3. #3

    Standardní

    Mám upload na fotky. A při každém uploadu ji musím dát id záznamu kterému náleží. Tzn třeba 5.jpg .... a mam tozařízený tak že nejdřív vložím záznam. Zjistím poslední id. zkopíruju tu fotku (copy). Potom provedu určitou kontrolu tý fotky (to tu nebudu rozebírat). Když to kontrolou neprojde musím smazat fotku i záznam. Kdybych věděl id zaznamu dopředu mohl bych zkopirovat jen fotku. Provest kontrolu. Poté když by to bylo uspěšné založit záznam.

    Vím dalo by se to udělat tak že by se fotky měly název nějákého tmp např. a potom by se přejmenovávali. Ale tohle mě napadlo jako první. A chtěl bych docela i vědět jak zjistit další index autoincrementu...
    HwTips.com

  4. #4

    Standardní

    Toto ti uz z principu nemuze fungovat, protoze databazove aplikace jsou viceuzivatelske. Co udelas v pripade, ze ti tam poslou tu fotku treba 2 uzivatele v relativne stejnem okamziku ? Jak zjistis, kterou operaci provede databazovy stroj jako prvni ? Nikdy nemuzes vychazet z toho jaky bude stav pocitadla autoinc nekdy v budoucnu, protoze jine vlakno, ktere nevidis, ti to muze rozhodit. Leda, ze bys zamykal celou tabulku, coz je kravovina(zbytecne to bude zdrzovat), proto se vzdycky pracuje s hodnotou autoinc az po fyzickem zalozeni zaznamu.

  5. #5

    Standardní

    pry je to v systemove promenne @@identity takze staci jen provest SELECT @@identity ale mne to vzdycky hazelo 0

  6. #6

    Standardní

    Jinak ta hodnota autoinc se da ziskat napr:
    SHOW TABLE STATUS FROM database LIKE 'table_name';

  7. #7

    Standardní

    Citace Původně odeslal jedik
    pry je to v systemove promenne @@identity takze staci jen provest SELECT @@identity ale mne to vzdycky hazelo 0
    V @@identity to ma napr. Sybase, ale je hodnota autoincu posledni provedene operace tzn. totez jako v LAST_INSERT_ID() v MySQL.

  8. #8

    Standardní

    Citace Původně odeslal viki_
    Proc zjistit uz pred vlozenim ? (ale teoreticky by to taky melo jit) Beznejsi postup je brat hodnotu generovanou po vlozeni:

    insert into ....;
    select LAST_INSERT_ID();
    Jak přesně se dá zapsat to
    Kód:
    select LAST_INSERT_ID
    ?? vrací mi to 0
    HwTips.com

  9. #9

    Standardní

    ... aha už nic....
    HwTips.com

  10. #10

    Standardní

    Jurman:

    Vraci to hodnotu autoinc posledni provedene operace, tzn. ze nejdriv musis udelat insert do tabulky, ktera ma autoinc sloupec a hned potom ten select

    napr:
    insert into pokus (colint) values (35);
    select LAST_INSERT_ID();

    P.S.:
    - uz mlcim

  11. #11

    Standardní

    poraďte pls už fakt nevím....
    (je to jen ukazkova tabulka)..
    id .. index autoincerement
    text ... textove pole...

    do phpMyAdmina napíšu dotaz
    Kód:
    INSERT INTO one VALUES(null, "fasfS"); 
    SELECT LAST_INSERT_ID() as id;
    vše v pohodě zobrazí to i v pohodě to IDčko.....

    jdu dělat vlastní sript ....

    Kód:
    <?
    	$spojeni = mysql_connect&#40;"localhost", "root", "***"&#41;;
    	$query = "INSERT INTO one VALUES&#40;null, \"Jurmanek\"&#41;;\n";
    	$query .= "SELECT LAST_INSERT_ID&#40;&#41; as id;";
    	$result = mysql_db_query&#40;"tst", $query, $spojeni&#41;;
    	while &#40;$zaznam = mysql_fetch_array&#40;$result&#41;&#41;
    	&#123;
    		echo $zaznam&#91;id&#93;;
    	&#125;
    	echo mysql_error&#40;&#41;;
    	mysql_close&#40;$spojeni&#41;;
    ?>
    Hlásí chybu
    Kód:
    Warning&#58; mysql_fetch_array&#40;&#41;&#58; supplied argument is not a valid MySQL result resource in d&#58;\web_service\web\www\tst\t2.php on line 6
    
    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '; SELECT LAST_INSERT_ID&#40;&#41; as id' at line 1
    HwTips.com

  12. #12

    Standardní

    Tak to teda nevim - PHP neumim ( v Jave mi to normalne chodi).

  13. #13

    Standardní

    Pisou se vubec do PHP ty ukoncovaci stredniky ?

  14. #14
    Senior Member mince Avatar uživatele KtK
    Založen
    16.10.2002
    Bydliště
    Behind fuc*ing WorkTable Device (Praha zapad)
    Příspěvky
    1 709
    Vliv
    285

    Standardní

    dva prikazy v jednom, to jde
    Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
    IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
    [pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)

  15. #15

    Standardní

    Citace Původně odeslal KtK
    dva prikazy v jednom, to jde
    ja bych řekl že v tom to bude, já to totiž používal odděleně:

    $dotaz=mysql_query("insert balbalba");
    if ($dotaz<>0) $id=mysql_insert_id($dotaz);
    else echo "error insert";
    C2D Wolfheart stabilized...CoolingSys completed...Aurora 3D Black...full 120mm Wolfheart
    WinXP && Gentoo Powered Wolfheart http://img215.imageshack.us/my.php?i...pgentooqt2.jpg
    Intel Core2Duo E6300 1.86@3.2GHz cooled by Ninja Plus| Gigabyte DS4 | 1024MB Kingston 750@920MHz | sound | Gigabyte X1650Pro SilentPipe II | TEAC 40x & Toshiba DVD-RW | WD800JB 80GB | Logitech MX510 | Fortron 300W NP(PN) | MS Sidewinder Strategic Commander|Acer 1721hm
    C366 2@1,85V 32MB RAM, Slackware 9.1 router connected to Chello

  16. #16

    Standardní

    Citace Původně odeslal KtK
    dva prikazy v jednom, to jde
    ...... no phpMyAdmin 2 najednou sežere... A jak myslíš že funguje dumpování zpět do databáze .... prostě to dá třeba 30 insertů za sebou (pokud je 30 zázánamů).

    Ale je pravda že nevím jestli jdou kombinovat inserty a selecty. Ale víc najednou jich de dát určitě ....
    HwTips.com

  17. #17
    Senior Member mince Avatar uživatele KtK
    Založen
    16.10.2002
    Bydliště
    Behind fuc*ing WorkTable Device (Praha zapad)
    Příspěvky
    1 709
    Vliv
    285

    Standardní

    Citace Původně odeslal Jurman
    Citace Původně odeslal KtK
    dva prikazy v jednom, to jde
    ...... no phpMyAdmin 2 najednou sežere... A jak myslíš že funguje dumpování zpět do databáze

    .... prostě to dá třeba 30 insertů za sebou (pokud je 30 zázánamů).
    No tak to jde napriklad udelat tak, ze se 30x zavola fce mysql(), nebo taky existuje prikaz SOURCE, jak me poucil viki_
    Citace Původně odeslal Jurman
    Ale je pravda že nevím jestli jdou kombinovat inserty a selecty. Ale víc najednou jich de dát určitě ....
    Coz jsem mel spis na mysli, spatne jsem to napsal..
    Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
    IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
    [pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)

  18. #18
    Senior Member
    Založen
    08.10.2002
    Bydliště
    Mělník
    Věk
    43
    Příspěvky
    1 275
    Vliv
    277

    Standardní

    a co treba

    select max(id) from nakatabulka

    ? pak jen priscetess 1 a mas dalsi index.
    CASE Chieftec DX-01B-D { GIGABYTE X48 DS5 { Intel q9300 + 8GB + ATI x1600 + 2x Seagate ES2 1TB } + LiteOn SHM-165P6S} } + 21" Samsung SyncMaster 215TW

  19. #19
    Senior Member mince Avatar uživatele KtK
    Založen
    16.10.2002
    Bydliště
    Behind fuc*ing WorkTable Device (Praha zapad)
    Příspěvky
    1 709
    Vliv
    285

    Standardní

    problem je v tom, ze on si muze zjistit co bude dal, jenze nez tam da dalsi polozku, tak se to muze zmenit.. Ja na tohle taky narazel, jak zjistit jakej autoindex dostala prave vlozena polozka.. Priznam se, ze jsem to vzdycky resil tak, ze jsem se vzapeti po vlozeni zeptal na nejvetsi id. Jenze tohle samozrejme trpi prave tim neduhem.. Na druhou stranu to prakticky vzdy fungovalo bez problemu..
    Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
    IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
    [pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)

  20. #20

    Standardní

    Citace Původně odeslal Glottis
    a co treba

    select max(id) from nakatabulka

    ? pak jen priscetess 1 a mas dalsi index.
    nojo . ale co když budu mít idčka 1 - 5. Šestej zázánam (id 6) jsem samzal protože se mi z nějákýho důvodu nelíbil. A pak máš max(id) ti vrátí 5. Pričteš 1 a máš 6 ... ale správný výsledek je 7 takže to taky nejde...
    HwTips.com

  21. #21
    Senior Member mince Avatar uživatele KtK
    Založen
    16.10.2002
    Bydliště
    Behind fuc*ing WorkTable Device (Praha zapad)
    Příspěvky
    1 709
    Vliv
    285

    Standardní

    jestli ti jde jen o to, zjistit, jaka je nasledujici polozka kdyz je autoincrement, tak PHPmyAdmin to umi, tak se do nej mrkni
    Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
    IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
    [pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)

  22. #22

    Standardní

    Ach Boze Odecitani Autoincrementu je naprosto standardni pouzivany a fungujici postup. Proc se taky nezkusite podivat do manualu k MySQL ?
    Je to hlavne mnohem rychlejsi nez select max, protoze ta hodnota pocitadla je udrzovana v metadatech v systemovych tabulkach - napr. select max z tabulky o nekolika stovkach tisic zaznamu bude dost pomala operace (samozrejme ze ten casovy rozdil v nejakych tabulkach s mensim objemem dat prilis patrny neni).

    V cem mate chybu to nevim, protoze v PHPku nedelam (a ani doufam delat nikdy nebudu ). Jestli vam ty prikazy nejdou najednou, tak proc je tam nepustite postupne ? Zalezi jak to ma implementovano konkretni jazyk (napr JDBC ma funkce pro spusteni cele prikazove davky tak pro vykonani jednoho SQL prikazu).


    Ja mam treba v Jave pro praci s MySQL napsanou jednoduchou statickou funkci, ktera funguje bez problemu:
    Kód:
       public static int execIdentInsertI&#40;String _sInsert, Connection _con&#41; &#123;
            try &#123;
                int ret = -1;
                if&#40; &#40;_sInsert==null&#41;||&#40;_con==null&#41; &#41; return ret;
                
                Statement stat = _con.createStatement&#40;&#41;;
                stat.executeUpdate&#40;_sInsert&#41;;
                java.sql.ResultSet rs = stat.executeQuery&#40;"select LAST_INSERT_ID&#40;&#41;;"&#41;;
                if&#40;rs.next&#40;&#41;&#41; ret = rs.getInt&#40;1&#41;;
                
                rs.close&#40;&#41;;
                stat.close&#40;&#41;;
                
                return ret;
            &#125; catch &#40;Exception e&#41; &#123;
                e.printStackTrace&#40;&#41;;
                return -1;
            &#125;
        &#125;

  23. #23

    Standardní

    Taky v tom PHPku muzete jeste vyzkouset funkci
    mysql_insert_id()
    viz - je u toho i priklad: http://cz.php.net/mysql_insert_id


    P.S.:
    tady se o tom taky hadaji
    http://forum.builder.cz/read.php?f=20&i=44853&t=44282

  24. #24
    Senior Member
    Založen
    08.10.2002
    Bydliště
    Mělník
    Věk
    43
    Příspěvky
    1 275
    Vliv
    277

    Standardní

    btw tohle ukazuje phpmyadmin tak si to vystourej jeho zdrojaku
    CASE Chieftec DX-01B-D { GIGABYTE X48 DS5 { Intel q9300 + 8GB + ATI x1600 + 2x Seagate ES2 1TB } + LiteOn SHM-165P6S} } + 21" Samsung SyncMaster 215TW

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. [MySQL] neco jako DISTINCT pro zadany sloupec
    Založil ripper v sekci fóra Programování
    Odpovědí: 2
    Poslední příspěvek: 19.05.2005, 11:03
  2. [MySQL] licence MySQL v komercni firme pod Windows
    Založil podws v sekci fóra Programování
    Odpovědí: 4
    Poslední příspěvek: 05.05.2005, 16:31
  3. [mysql] - export do csv
    Založil Braindead v sekci fóra Programování
    Odpovědí: 3
    Poslední příspěvek: 25.04.2005, 17:15
  4. [MySQL] DELETE na spojenych tabulkach ?
    Založil Aigor v sekci fóra Programování
    Odpovědí: 7
    Poslední příspěvek: 23.04.2005, 21:23
  5. [MySQL] Vykonanie *.sql
    Založil Entita v sekci fóra Programování
    Odpovědí: 10
    Poslední příspěvek: 27.05.2003, 00:01

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •