Archief - check doet zijn werk niet

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

fromalk

Legacy Member
Hallo iedereen,

Ik heb een probleempje met de volgende sql code. Ondanks dat het erg simpel is krijg ik het niet aan de praat in MySQL. De tabel moet dus gemeenten opslaan... De waarde van een postcode moet tussen 1000 en 9992 liggen. Toch neemt de database nog steeds waarden zoals 500 aan als postcode


Code:
DROP TABLE IF EXISTS Gemeenten;
CREATE TABLE Gemeenten (
  gemeente_id INT(4) PRIMARY KEY NOT NULL,
  postcode  INT(4) NOT NULL UNIQUE,
  gemeentenaam VARCHAR(30) NOT NULL,
  land VARCHAR(20) DEFAULT 'belgië',
  CONSTRAINT con_postcode CHECK (postcode BETWEEN 1000 AND 9992)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
DESCRIBE Gemeenten;

dit mag dus niet aanvaard worden:
Code:
INSERT INTO gemeenten VALUES(2, 500, 'Alken', '');

ik zie het probleem hiermee echt niet, heb de mysql doc reeds geraadpleegd net als google :sad:

Hopelijk weet iemand van jullie wat ik verkeerd doe

DieselPower

Legacy Member
Databanken: Lezen is goedkoop, schrijven is duur. Ge kunt beter laten checken dmv javascript en daarna nog eens als ge saneert met php.

dJeez

Legacy Member
Via een stored procedure of trigger zou je dat op DB niveau kunnen opvangen (bij de trigger gebruik je dan gewoon vb. een insert van een duplikaat in een tabel met unieke primary key om een stop te genereren - want dat is ook iets waar MySQL geen ondersteuning voor heeft). Maar sowieso kan je dat best ook al te checken voor je de insert doet (dus bij ingave of het verwerken ervan), en de gebruiker nuttige feedback geven over wat hij/zij verkeerd doet.

Gamefactor

Legacy Member
Inderdaad is het aangeraden te checken via je scripting taal, zo onstaan er nooit ongewenste inserts.

Cycloon

Legacy Member
Gamefactor zei:
Inderdaad is het aangeraden te checken via je scripting taal, zo onstaan er nooit ongewenste inserts.

Een check in de database zou net zorgen dat er nooit ongewenste inserts zijn. Stel nu dat iemand toch een foutje maakt in zijn code waardoor plots foute gegevens in de databank komen dan ben je gezien, als de database zelf controleert heb je daar dus zeker nooit last van (om het even wat de programmeur in zijn code verprutst).

Maar jammer genoeg is MySQL niet zo'n heel erg uitgebreide databank.

Gamefactor

Legacy Member
Cycloon zei:
Een check in de database zou net zorgen dat er nooit ongewenste inserts zijn. Stel nu dat iemand toch een foutje maakt in zijn code waardoor plots foute gegevens in de databank komen dan ben je gezien, als de database zelf controleert heb je daar dus zeker nooit last van (om het even wat de programmeur in zijn code verprutst).

Maar jammer genoeg is MySQL niet zo'n heel erg uitgebreide databank.

Ja inderdaad als je met SQL gaat kijken is checken op database niveau aangeraden, maar vermits het hier gaat om MySQL is checken op dat niveau moeilijk...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan