Prodej projektu Duchod.cz - cena 550 tis Kč. Dále MojeFinance.cz, DuchodovaReforma.cz
Zobrazují se odpovědi 1 až 8 z 8

Jak na hromadné přejmenování prefix tabulek?

  1. Potřebuju přejmenovat prefix tabulek. Je jich fakt hodně, takže se mi to ručně nechce dělat. Je nějaký příkaz na hromadné přejmenování tabulek? Prefix je všude stejný, takže je to jen nahrayení řetězec za řetězec.

  2. Co se právě děje na Webtrhu?
  3. Otevři se db v pspadu a pomocí funkce nahradit.

  4. Citace Původně odeslal anakonda Zobrazit příspěvek
    Otevři se db v pspadu a pomocí funkce nahradit.
    To mě také napadlo, ale děsně velký soubor a nechce se mi stahovat a nahrávat.. Tak se ptám, jak to udělat rovnou na serveru.

  5. Jedná se o mysql? Máš práva admina? Měníš pouze prefix?

    Mysql má příkaz "rename table", buď si můžeš udělat proceduru, který si vytáhne názvy tabulek a přímo zavolá příkaz na přejmenování nebo si můžeš nejprve vygenerovat sqlka pro přejmenování a poté je v php adminu spustit. Během přejmenování bys měl mít vypnutý web a na mysql nesmí být žádné locky a otevřená spojení kromě tvého.

    Tenhle kód ti vygeneruje sql příkazy pro změnu prefixu z "wp" na "wp2". Pokud máš jiný prefix, je nutné změnit číslo v substr na délka prefixu + 1. Klidně sem napiš z jakého na jaký prefix to máš a změním sql. Psáno z hlavy, tak se za případné sql chyby omlouvám. Spuštění tohoto příkazu nemá žádné destruktivní následky, pouze skládá sql pro přejmenování, které musíš poté ručně spustit.

    Kód:
    SELECT  concat ('rename table `', table_name,'` to `wp2', substr(table_name, 3), '`;') as sql
    FROM information_schema.tables
    WHERE table_name like 'wp_%'
      and table_schema='my_db'
    Doplnění: je také vhodné přejmenování omezit pouze pro jednu databázi (kdybys jich náhodou měl přístupných více, viz ten poslední řádek)

  6. Citace Původně odeslal TomášX Zobrazit příspěvek
    Jedná se o mysql? Máš práva admina? Měníš pouze prefix?

    Mysql má příkaz "rename table", buď si můžeš udělat proceduru, který si vytáhne názvy tabulek a přímo zavolá příkaz na přejmenování nebo si můžeš nejprve vygenerovat sqlka pro přejmenování a poté je v php adminu spustit. Během přejmenování bys měl mít vypnutý web a na mysql nesmí být žádné locky a otevřená spojení kromě tvého.

    Tenhle kód ti vygeneruje sql příkazy pro změnu prefixu z "wp" na "wp2". Pokud máš jiný prefix, je nutné změnit číslo v substr na délka prefixu + 1. Klidně sem napiš z jakého na jaký prefix to máš a změním sql. Psáno z hlavy, tak se za případné sql chyby omlouvám. Spuštění tohoto příkazu nemá žádné destruktivní následky, pouze skládá sql pro přejmenování, které musíš poté ručně spustit.

    Kód:
    SELECT  concat ('rename table `', table_name,'` to `wp2', substr(table_name, 3), '`;') as sql
    FROM information_schema.tables
    WHERE table_name like 'wp_%'
      and table_schema='my_db'
    Doplnění: je také vhodné přejmenování omezit pouze pro jednu databázi (kdybys jich náhodou měl přístupných více, viz ten poslední řádek)
    Jsem na svém localhostu, takže jsem root. Teď to zkouším přes prefix. Adminer mi zkopíroval tabulky a přidal prefix copy_, takže to budu zaměňovat. Ovšem ještě snažší by bylo, kdybych si ty tabulky vlastně zkopíroval a jen k nim dal jiný prefix. Zůstanou ve stejné db.


    Ještě k těm tabulkám.. Kolik je rozumné mít v jedné databázi tabulek? Ten prefix bude jazyková lokalizace. Některé tabulky budou společné, jiné se budou lišit právě v tom prefixu. Už jsem se dostal na tisíc tabulek na jednu db... Trochu se obávám, jestli to v ostrém provozu nebude moc pomalé.

  7. Citace Původně odeslal siva01 Zobrazit příspěvek
    Už jsem se dostal na tisíc tabulek na jednu db...
    A to jsou opravdu všechno relační data? Nebylo by (třeba na část) lepší použít nějakou dokumentovou databázi? MySQL a obecně relační databáze není jediný typ a dost často ani nejvhodnější..

    Netuším ale samozřejmě, o co jde, 1K tabulek se mi ale zdá příliš..

  8. Kód:
    concat ('rename table `', table_name,'` to `wp2', substr(table_name, 3), '`;') as sql
    - zde to hlásí chybu syntax error... Ty divné apostrofy tam mají být?

  9. sorry, za tím concat má být sql v uvozovkách
    Kód:
    as 'sql'
    Ty divné uvozovky je uvození tabulek, aby v nich mohli být i nehezké znaky nebo klíčová slova, člověk nikdy neví, jak se tabulky jmenují.

    Tenhle příkaz ti ty tabulky defacto přesune na nový název, takže operace je velice rychlá a původní názvy již nebudou.

    Dávat do názvů tabulek jazyk není obecně vhodné, používalo se dříve, teď už to moc nevídám, jsou s tím akorát problémy (klidně se mohu rozepsat více). MySQL zvládne i desetitisíce tabulek. Co tě omezuje je jejich velikost. Další problém s mnoha tabulkami je, že phpmyadmin, adminer a další si načítají nějaký describe tabulek a při hodně tabulkách to trvá dlouho a zbytečně to zatěžuje server.

    Tisíc tabulek u mysql negeneruje nijak větší náročnost a samotná databáze s tím nebude mít problémy. Zpomalit ti to ale výrazně může právě nějaké phpmyadminy, adminery.

    Vše ale nasvědčuje špatné struktuře databáze a nejspíš se ti to vymstí někdy později. Doporučení dávat data do dokumentové databáze bych spíše neposlouchal, vzniknou ti s tím jiné problémy, chová se to jinak, máš pryč konzistenci, administrace a přehledy jsou také trochu odlišné. Pokud chceš konzultovat, klidně napiš, databázím se věnuji profesionálně.

Hostujeme u Server powered by TELE3