Avatar billede ahrensberg Nybegynder
07. september 2006 - 14:11 Der er 11 kommentarer og
1 løsning

Typecasting i MySQL

Hej alle

Nedenstående query fungere kun hvis min database ikke er tom:

INSERT INTO product_cats (priority, active) SELECT MAX(priority)+1, 1 FROM product_cats

Det er fordi at den ikke finder nogen max-værdi i 'priority' hvis tabellen er tom. Kan man dog ikke typecaste den returnerede værdi til en integer, så et evt. null-resultat vil blive typecastet til værdien 0, og herefter kan adderes med 1.
Avatar billede ahrensberg Nybegynder
07. september 2006 - 14:27 #1
... eller andet forslag til hvordan det kan komme til at lade sig gøre?!
Avatar billede erikjacobsen Ekspert
07. september 2006 - 15:10 #2
Avatar billede arne_v Ekspert
07. september 2006 - 16:48 #3
eller IFNULL

men jeg er meget betænkelig ved MAX+1 princippet !
Avatar billede razmuz_dk Nybegynder
07. september 2006 - 16:57 #4
mysql> SELECT CAST('' AS UNSIGNED);
+----------------------+
| CAST('' AS UNSIGNED) |
+----------------------+
|                    0 |
+----------------------+
1 row in set, 1 warning (0.01 sec)

Den du leder efter?
Avatar billede ahrensberg Nybegynder
07. september 2006 - 17:27 #5
Hov, glemte lige at svare, men brugte IFNULL som jeg fandt ved erikjacobsen's hjælp, men smid et par svar. Så skal jeg gi' point. Der udover, hvorfor er du, erikjacobsen, betænkelig ved MAX+1 princippet?
Avatar billede ahrensberg Nybegynder
07. september 2006 - 17:28 #6
... arne_v selvfølgelig.
Avatar billede erikjacobsen Ekspert
07. september 2006 - 17:32 #7
Hvis der er flere der gør det samtidigt, er du ikke sikker på at få forskellige svar.
Jeg samler slet ikke på point, tak.
Avatar billede ahrensberg Nybegynder
07. september 2006 - 17:57 #8
erikjacobsen:> Når jeg gør det på denne måde, skulle der (efter min overbevisning) ikke kunne ske det du nævner. Når det hele bliver foretaget i ét kald, sker det så ikke med gensidig udelukkelse (mutual exclusion)?

Blev det istedet gjort i to kald, f.eks. med først et udtræk af max værdien, som herefter blev brugt i et nyt kald, så ville der kunne ske det du snakker om... Er jeg helt forkert på den?
Avatar billede erikjacobsen Ekspert
07. september 2006 - 18:07 #9
Jeg vil ikke tro at hele tabellen product_cats bliver låst ved operationen. Og kan du passende besværgelser til at låse den, så er det da lidt af en stopklods i systemet.

Hvad er dit felt "priority" for en fisk?
Avatar billede arne_v Ekspert
08. september 2006 - 05:32 #10
Jeg lavede en lille test med 25 tråde som lavede inserts på den måde.

MyISAM tabeller ser ud til at virke - den må låse fint.

InnoDB tabeller gav deadlock exceptions og trådene døde en efter en.

Jeg ville undgå den konstruktion hvis det var muligt.
Avatar billede ahrensberg Nybegynder
08. september 2006 - 10:46 #11
Mit "priority" felt bruger jeg til at definere i hvilken rækkefølge kategorierne skal sorteres.

arne_v:> Kender ikke til MyISAM og kan ikke helt huske InnoDB. Men hvorfor den giver deadlocks kan jeg ikke helt forstå. ^o|
Avatar billede ahrensberg Nybegynder
20. september 2006 - 08:19 #12
Opgaven lukkes.
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