Autor | Zpráva | ||
---|---|---|---|
ondra256 Profil |
#1 · Zasláno: 27. 5. 2016, 11:22:06
Zdravím,
potřebuju pomoct se sestavením následujícího, který maže všechna data ve vybraných tabulkách: Když sestavím dotaz na 2 tabulky tak funguje DELETE FROM attribute, attribute_combination USING attribute, attribute_combination Když, ale sestavím dotaz na cca 150 tabulek, které v databázi jsou (vypadá uplně stejně jen je tam víc tabulek), tak se provede, žádná chyba nevyskočí, ale nesmaže se nikde nic. Zkoušel jsem před deletem vypínat kontrolu cizích klíčů, ale nijak to nepomohlo (stejně bych očekával že dostanu chybu). Nesetkal se s tím někdo? |
||
juriad Profil |
#2 · Zasláno: 27. 5. 2016, 11:56:41
ondra256:
Proveď 150 dotazů. A můžeš provést TRUNCATE TABLE, který by měl být výkonnější. Jsi si jistý, že kod pro výmaz všeho chceš psát v PHP? Není lepší DROPnout celou databázi a vytvořit ji znovu? Pokud tu syntaxi chápu správně, provádíš kartézský součin tabulek attribute a attribute_combination. Něco jako: SELECT * FROM attribute, attribute_combination |
||
ondra256 Profil |
#3 · Zasláno: 27. 5. 2016, 13:37:34
O PHP jsem nenapsal ani slovo. Mám na to MySQL proceduru.
Databázi dropnout nelze, protože nemám oprávnění, mám to na obyčejném hostingu, nemám VPS. Ten kartézský součin mně nenapadl, to máš asi pravdu, špatně jsem ten multi-delete pochopil, budu muset bohužel posílat 150 dotazů. O TRUNCATE vím, ale když jsem na své databázi srovnával TRUNCATE a DELETE tak paradoxně byl DELETE rychlejší. Rozhodl jsem se teda pro DELETE s tím, že DELETE má možnost použití parametru QUICK, ale ten jsem ještě netestoval. Otestuju ještě všechny možnosti a uvidím. Dík moc |
||
TomášK Profil |
#4 · Zasláno: 27. 5. 2016, 13:41:19
Přijde mi divné, že jsou ty samé tabulky ve FROM i v USING. Nestačí je dát do FROM? Nezmění se něco? Tak jako tak, 150 dotazů bude lepší než jeden obrovský. Zvlášť v proceduře.
juriad Ohledně TRUNCATE, změřil bych si, jestli je opravdu rychlejší, teď jsem někde četl opak kev.inburke.com/kevin/a-two-month-debugging-story (PostgreSQL) TRUNCATE TABLE table1 table2 table3 table4 CASCADE ALTER TABLE tableA DISABLE TRIGGER ALL; DELETE FROM tableA; ALTER TABLE tableA ENABLE TRIGGER ALL; BEGIN; SET CONSTRAINTS ALL DEFERRED; DELETE FROM tableA; DELETE FROM tableB; COMMIT A co s tím může být za problémy je v článku, ale zřejmě jen v PostgreSQL. |
||
ondra256 Profil |
#5 · Zasláno: 27. 5. 2016, 13:43:42
Když je nepoužiju v USING tak vyskočí ERROR
|
||
Keeehi Profil |
#6 · Zasláno: 27. 5. 2016, 13:43:55
Rozdíl mezi TRUNCATE a DELETE je ještě v tom, že TRUNCATE resetuje autoincrement u sloupců.
|
||
TomášK Profil |
#7 · Zasláno: 27. 5. 2016, 13:56:02
ondra256
Máš pravdu, špatně jsem pochopil dokumentaci. |
||
Časová prodleva: 9 let
|
0