20. august 2007 - 13:07Der er
13 kommentarer og 1 løsning
Constraint: Kun én forekomst af bestemt værdi for hver
Kan man lave en constraint på en tabel:
"For hver "RegnskabID" må kun findes én 'RettighedID=2' "?
(2 betyder administrator - der må kun være én administrator pr. regnskab. Men for hver "RegnskabID" må der gerne være mange 'RettighedID' som ikke er lig 2)
... nå ja, det kan jeg jo google mig til (en slags eventhandler som man kan tilknytte en tabel, til at håndtere INSERT, UPDATE, DELETE).
Har du så et forslag til, hvordan den givne trigger skulle se ud? De eksempler jeg har fundet laver alle en insert i en anden tabel eller tæller en variabel op. Det er jo ikke det, jeg skal bruge. Tænker mig, at den skal tjekke på antallet af administratorer, og så evt. afvise INSERTen eller UPDATEn eller DELETEn.
Jeg har MySQL 6.0... der findes vist ikke nyere. Jeg har nok brug for en stump rigtig SQL
Ved du så noget andet(?): Kan man ikke lave følgende med MySQL (Jeg vil tjekke, om den konto, jeg forsøger at indsætte, har et datointerval som overlapper med i forvejen eksisterende konti, og i så fald ikke indsætte den) :
IF not exists (SELECT <konti med overlappende gyldighedsinterval>) THEN INSERT INTO tabel values (<konto med gyldighedinterval>) END IF
Jeg kan ikke få det til at virke - måske SKAL det være i en stored procedure, eller har jeg fejl i syntaksen, eller hvad? Jeg googler og googler men kan ikke finde nogen løsning.
CREATE TABLE trigtest (i INTEGER NOT NULL PRIMARY KEY); DELIMITER | CREATE TRIGGER trigtest_insert BEFORE INSERT ON trigtest FOR EACH ROW BEGIN IF NEW.i > 10 THEN CALL OOOPS(); -- should be RETURN FALSE; or RAISEERROR; but MySQL 5.0 does not support that END IF; END; | DELIMITER ; INSERT INTO trigtest VALUES (1); INSERT INTO trigtest VALUES (10); INSERT INTO trigtest VALUES (100); DROP TRIGGER trigtest_insert; DROP TABLE trigtest;
Ok, tak for det. Det vil jeg lige kigge på. Hvordan ser det ud med race-conditions og triggers? Jeg tænker på: Først spørger jeg, om min betingelse for at UPDATE er opfyldt, og får positivt svar. Så, i splitsekundet inden jeg når at UPDATE, kommer en anden bruger med sin UPDATE, og betingelsen for min UPDATE er faldet til jorden.
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.