Kom ihåg mig?
Home Menu

Menu


Säker query?

Ämnesverktyg Visningsalternativ
Oläst 2011-05-05, 12:39 #1
hoover hoover är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2004
Inlägg: 48
hoover hoover är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2004
Inlägg: 48
Standard Säker query?

Hej,
Jag vill rensa upp min databas och ta bort rader som inte är relaterade till andra tabeller, typ:

DELETE FROM tableB WHERE id NOT IN(SELECT id FROM tableA)

Min fråga är om ovanstående Query är "säker"?
Finns det tex någon risk att "DELETE FROM tableB WHERE id NOT IN()" exekveras, men inte "SELECT id FROM tableA"... vilket skulle få det katastrofala resultatet att hela tableB raderas.

Om risk finns. Vad är det bättre sättet att göra samma sak?
hoover är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-05-05, 12:47 #2
Ara Ara är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2005
Inlägg: 1 956
Ara Ara är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2005
Inlägg: 1 956
vad är det för databas?

begin tran
DELETE FROM tableB WHERE id NOT IN(SELECT id FROM tableA)
titta om det ser bra ut.
commit tran

gör som om du är osäker
Ara är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-05-05, 12:49 #3
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Ja, den är säker - men läskig. Lätt att göra fel. Vad händer t.ex. om du av misstag råkar ändra något i den inre sql-frågan som gör att den inte retunerar något?

Det är förmodligen säkrare att loopa igenom rad för rad, även om det tar otroligt mycket längre tid. En annan lösning är att hämta en lista med alla id-nummer som skall bort, kolla att listan inte är överdrivet lång och sedan köra delete where in...
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-05-05, 12:56 #4
Ara Ara är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2005
Inlägg: 1 956
Ara Ara är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2005
Inlägg: 1 956
Citat:
Ursprungligen postat av coredev Visa inlägg
Ja, den är säker - men läskig. Lätt att göra fel. Vad händer t.ex. om du av misstag råkar ändra något i den inre sql-frågan som gör att den inte retunerar något?

Det är förmodligen säkrare att loopa igenom rad för rad, även om det tar otroligt mycket längre tid. En annan lösning är att hämta en lista med alla id-nummer som skall bort, kolla att listan inte är överdrivet lång och sedan köra delete where in...
Ju mer "manuellt arbete" ju större är risken till fel, anser jag. Kör du det i en transaktion är du väldigt säker.
Ara är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-05-05, 13:01 #5
hoover hoover är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2004
Inlägg: 48
hoover hoover är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2004
Inlägg: 48
Tack för bra svar.
Det är en MySQL-databas. Jag kommer inte ändra den inre frågan, skriptet kommer köras som ett cronjob. Så om "Hela frågan eller INGET körs" så vågar jag nog ha det som ovan.

Det är ganska många tabeller som ska rensas, och jag kommer att köra skriptet/frågorna dagligen för att hålla databasen så ren som möjligt. (strukturen är kass, men det är inget jag vill/kan göra något åt nu)
hoover är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-05-05, 14:03 #6
cols avatar
col col är inte uppkopplad
Medlem
 
Reg.datum: May 2003
Inlägg: 178
col col är inte uppkopplad
Medlem
cols avatar
 
Reg.datum: May 2003
Inlägg: 178
Det är ju aldrig fel att göra en backup av databasen innan upprensningen sker
col är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-05-05, 14:36 #7
hoover hoover är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2004
Inlägg: 48
hoover hoover är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2004
Inlägg: 48
Citat:
Ursprungligen postat av col Visa inlägg
Det är ju aldrig fel att göra en backup av databasen innan upprensningen sker
Det kommer jag under alla omständigheter att göra
hoover är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 3 (0 medlemmar och 3 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 07:32.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017