2010-12-15, 21:23
#1
Hej allesammans,
Jag försöker utveckla en applikation som kommer kommunicera med en databas rejält mycket. Jag kom på därefter att det nog vore en bra ide både säkerhetsmässigt och för prestanda skäl om man kunde överlämna så mycket arbete till MySQL som möjligt och det försöker jag göra nu, men jag har några frågor.
Dem senaste timmarna så har jag lärt mig lite SQL syntax för att skriva ok enkla "stored procdure". Detta är den svåraste jag har gjort hitintills:
Problemet är att som ni ser så utför flertals förfrågningar, hur kan man strukturera om den så den blir lite mer intelligent och sparar resultatet och återanvänder det? Läst lite om CURSOR(S), men har aldrig kunnat få det fungera, antingen så blir det fel eller så returneras NULL
Några andra frågor jag har är, är en hel stored prodcedure atomic och säker köra flertals körningar samtidigt? D.v.s om en stored prodcedure ändrar i någon tabell, garanterar MySQL att dem aldrig kommer köras exakt samtidigt (ändringarna) så t.ex LAST_INSERT_ID kommer alltid returnera det senaste inlagda id av den stored prodcedure som kör den, även om kanske det har hunnit läggas till en ny post? Om inte, hur fixar jag det?
OBS. Jag har aldrig programmerat i SQL sedan tidigare direkt.
Tack på förhand och så önskar jag er en God Jul!
Jag försöker utveckla en applikation som kommer kommunicera med en databas rejält mycket. Jag kom på därefter att det nog vore en bra ide både säkerhetsmässigt och för prestanda skäl om man kunde överlämna så mycket arbete till MySQL som möjligt och det försöker jag göra nu, men jag har några frågor.
Dem senaste timmarna så har jag lärt mig lite SQL syntax för att skriva ok enkla "stored procdure". Detta är den svåraste jag har gjort hitintills:
Kod:
DELIMITER //
CREATE PROCEDURE add_user (IN email VARCHAR(255),
IN password VARCHAR(64),
OUT user_id INT UNSIGNED,
OUT private_id BINARY(16)
)
BEGIN
DECLARE my_uuid char(37);
IF NOT EXISTS (SELECT ID FROM User WHERE Email=email) THEN
set private_id = BinaryUUID();
INSERT INTO User (Email, Password, PrivateID) VALUES (email,unhex(sha1(concat("salt",password))),private_id);
SELECT ID INTO user_id FROM User WHERE Email=email;
ELSE
SELECT PrivateID INTO private_id FROM User WHERE Email=email;
set user_id = LAST_INSERT_ID();
END IF;
END//
DELIMITER ;
Problemet är att som ni ser så utför flertals förfrågningar, hur kan man strukturera om den så den blir lite mer intelligent och sparar resultatet och återanvänder det? Läst lite om CURSOR(S), men har aldrig kunnat få det fungera, antingen så blir det fel eller så returneras NULL

Några andra frågor jag har är, är en hel stored prodcedure atomic och säker köra flertals körningar samtidigt? D.v.s om en stored prodcedure ändrar i någon tabell, garanterar MySQL att dem aldrig kommer köras exakt samtidigt (ändringarna) så t.ex LAST_INSERT_ID kommer alltid returnera det senaste inlagda id av den stored prodcedure som kör den, även om kanske det har hunnit läggas till en ny post? Om inte, hur fixar jag det?
OBS. Jag har aldrig programmerat i SQL sedan tidigare direkt.
Tack på förhand och så önskar jag er en God Jul!