Aangezien MySQL geen CHECK-statement ondersteunt, maar ik wel een CHECK moet uitvoeren, wilde ik dit dezelfde functionaliteit met een TRIGGER maken. Het idee is dat ieder record dat ingevoerd wordt, wordt gecontroleerd op het attribuut Leeftijd en als deze niet aan de voorwaarden voldoet de INSERT gestopt wordt. Het gaat hier om de volgende tabel:
Het attribuut Leeftijd moet tussen de 1 en 6 jaar zijn. Nu heb ik als basis elke keer de volgende code genomen:
Bij het laatste deel van de code (dat hierboven is 'weggelaten') heb ik al verschillende codes geprobeerd, maar uiteindelijk leek het erop (na via google verschillende forums geraadpleegd te hebben) dat ik het beste een attribuut dat NOT NULL is gedeclareerd de waarde NULL kan meegeven om de INSERT te stoppen. Dat probeerde ik zo:
Zoals te zien, heb ik de voorwaarde al aangepast aan 'groter dan 6' om het testen wat makkelijker te maken, maar ik blijf verschillende errors krijgen. De meest voorkomende is deze:
code:
1
2
3
4
5
6
7
| CREATE TABLE IF NOT EXISTS `kind` ( `Kindnaam` varchar(20) NOT NULL, `Leeftijd` tinyint(1) NOT NULL, `NaamMoeder` varchar(20) DEFAULT NULL, PRIMARY KEY (`Kindnaam`), KEY `kindFK` (`NaamMoeder`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Het attribuut Leeftijd moet tussen de 1 en 6 jaar zijn. Nu heb ik als basis elke keer de volgende code genomen:
code:
1
2
3
| CREATE TRIGGER checkGetal BEFORE INSERT ON kind FOR EACH ROW *kijk of het getal van het attribuut 'Leeftijd' tussen de 1 en de 6 zit, zo niet, laat de insert niet doorgaan*; |
Bij het laatste deel van de code (dat hierboven is 'weggelaten') heb ik al verschillende codes geprobeerd, maar uiteindelijk leek het erop (na via google verschillende forums geraadpleegd te hebben) dat ik het beste een attribuut dat NOT NULL is gedeclareerd de waarde NULL kan meegeven om de INSERT te stoppen. Dat probeerde ik zo:
code:
1
2
3
| CREATE TRIGGER checkGetal BEFORE INSERT ON kind FOR EACH ROW IF Leeftijd>6 THEN Leeftijd=NULL; |
Zoals te zien, heb ik de voorwaarde al aangepast aan 'groter dan 6' om het testen wat makkelijker te maken, maar ik blijf verschillende errors krijgen. De meest voorkomende is deze:
Heeft iemand misschien tips, trucks of andere geintjes om me hiermee verder te helpen? Ik moet wel zeggen dat ik redelijk nieuw ben met alles wat met SQL te maken heeft, dus hopelijk kunnen jullie hier een beetje rekening mee houden.#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=NULL' at line 1