Avatar billede mtrolle Nybegynder
26. juni 2007 - 17:00 Der er 9 kommentarer og
2 løsninger

Brug af LOCK TABLE

Hej,

Jeg har en statistik tabel, den bliver der lavet INSERT DELAYED til konstant.
Denne tabel vil jeg gerne tømme ud i ny og næ og har tænkt mig følgende:

1: LOCK TABLE `statistics_live` READ;

2: INSERT INTO `statistics_beregn` SELECT * FROM `statistics_live`;

3: TRUNCATE `statistics_live`;

4: UNLOCK TABLE `statistics_live`;

Men nu siger MySQL i 2. query, at statistics_beregn ikke er LOCKED: Table 'statistics_beregn' was not locked with LOCK TABLES

Hvorfor?


//mtrolle
Avatar billede bromer Nybegynder
26. juni 2007 - 17:06 #1
Har du prøvet at låse med skriverettigheder. Jeg vil tro det bliver som:

1: LOCK TABLE `statistics_live` WRITE;

2: INSERT INTO `statistics_beregn` SELECT * FROM `statistics_live`;

3: TRUNCATE `statistics_live`;

4: UNLOCK TABLE `statistics_live`;
Avatar billede arne_v Ekspert
26. juni 2007 - 17:59 #2
Skal du ikke locke begge tabeller ?

Iøvrigt skal man mig bekendt ikke angive tabeller ved unlock.
Avatar billede bromer Nybegynder
26. juni 2007 - 18:58 #3
Jeg var så vågen at jeg ikke så at der var flere tabeller indvolveret :) Manualen [1] mener at du har ret arne_v :) Så koden må blive noget der minder om:

1: LOCK TABLE `statistics_live` READ;
2: LOCK TABLE `statistics_beregn` WRITE;

3: INSERT INTO `statistics_beregn` SELECT * FROM `statistics_live`;

4: TRUNCATE `statistics_live`;

5: UNLOCK TABLES;

[1] http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html
Avatar billede mtrolle Nybegynder
26. juni 2007 - 19:14 #4
Hej bromer,

Din løsning giver en Table 'statistics_live' was not locked with LOCK TABLES på forespørgelse 3.
Jeg kører MySQL 4.1.2
Avatar billede mtrolle Nybegynder
26. juni 2007 - 19:30 #5
Rettelse, jeg gør nu således:

1: LOCK TABLE `statistics_live` READ, `statistics_beregn` WRITE;

2: INSERT INTO `statistics_beregn` SELECT * FROM `statistics_live`;

3: TRUNCATE TABLE `statistics_live`;

4: UNLOCK TABLES;

Det resultere i en fejl i 3: Can't execute the given command because you have active locked tables or an active transaction

Og hvis jeg ikke kan lave en truncate forsvinder hele ideen jo - kan det være rigtigt jeg ikke kan det?
Avatar billede arne_v Ekspert
26. juni 2007 - 20:09 #6
Virker det med:

3: DELETE FROM `statistics_live`;

?
Avatar billede mtrolle Nybegynder
26. juni 2007 - 21:01 #7
Ja tak - det gjorde det faktisk.
Avatar billede mtrolle Nybegynder
26. juni 2007 - 21:23 #8
Smid et svare begge - så deler I point :)
Avatar billede arne_v Ekspert
26. juni 2007 - 21:29 #9
TRUNCATE er formentligt ikke brugbart i transaction sammenhæng.

Og et svar fra mig.
Avatar billede bromer Nybegynder
26. juni 2007 - 21:43 #10
og her..
Avatar billede mtrolle Nybegynder
26. juni 2007 - 22:05 #11
I følge guiden kan man bare lave en DROP TABLE, derfor synes jeg det virker sjovt man ikke kan lave en truncate.
Men her er i alt fald point :) Det virker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester