Leer alles over SQL

Constraints om bepaald gedrag af te dwingen

geschreven door SQL Tutorial.nl SQL Tutorial.nl

Constraints zijn bedoeld voor het afdwingen van bepaalde invoer op velden.

Voorbeelden van constraints zijn:

  • Not Null
    Voor het afdwingen van verplichte invoer van een bepaald veld.
  • Unique
    Voor het afdwingen van een unieke waarde in een tabel.
  • Primary key
    Voor het afdwingen van een primaire waarde in een tabel, deze dient als sleutel.
  • Foreign key
    Voor het leggen van relaties tussen meerdere tabellen.

Not Null

Het is mogelijk om lege waardes in een tabel op te slaan, dit zijn NULL waardes. Met de NOT NULL constraint kan aangegeven worden of een bepaald veld verplicht ingevuld moet worden. dit veld mag dus geen NULL waarde bevatten. De constraint kan worden toegevoegd bij het maken van de tabel.

CREATE TABLE tabelnaam
    (
        kolomnaam1 datatype NOT NULL,
        kolomnaam2 datatype
    )

Genomen het voorbeeld waarin een tabel wordt gemaakt voor het opslaan van persoonsgevens. Deze gegevens bestaan onder andere uit de voor, – en achternaam, woonplaats en geslacht.

In het voorbeeld hieronder zal worden afgedwongen dat de voor, – en achternaam geen lege waarde (NULL) mag bevatten. De velden moeten dus worden ingevuld.

CREATE TABLE persoon
	(
		id int,
		voornaam varchar(255) NOT NULL,
		achternaam varchar(255) NOT NULL,
		woonplaats varchar(255),
		geslacht varchar(1)
	)

Unique

Er zijn situaties waarin de combinatie van één of meerdere kolommen uniek moet zijn. Hierbij valt te denken aan unieke ID nummers. Het afdwingen van unieke waardes kan gedaan worden met de UNIQUE constraint.

De syntax van de UNIQUE contraint ziet er als volgt uit CONSTRAINT Constraintnaam UNIQUE kolomnaam1

Het is ook mogelijk om een combinatie van meerdere velden als constraint op te geven door middel CONSTRAINT Constraintnaam UNIQUE ( kolomnaam1, kolomnaam2 )

Identificatie

Hierboven is Constraintnaam gebruikt als naam voor de constraint. Deze naam is bedoeld als identificatie van de constraint. Deze identificatie moet uniek zijn over alle constraints voor de tabel in kwestie.

UNIQUE constraint toevoegen

Het toepassen van de UNIQUE constraint kan worden gedaan bij het maken van de tabel.

CREATE TABLE tabelnaam
    (
        kolomnaam1 datatype NOT NULL,
        kolomnaam2 datatype,
        CONSTRAINT Constraintnaam UNIQUE kolomnaam1
    )

Het is ook mogelijk om een constraint later toe te voegen voor een bestaande table. Hiervoor kan het ALTER TABLE statement gebruikt worden.

ALTER TABLE tabelnaam
    ADD CONSTRAINT Constraintnaam UNIQUE ( kolomnaam1, kolomnaam2 )

UNIQUE constraint verwijderen

Voor het verwijderen van de UNIQUE constraint kan het ALTER TABLE statement gebruikt worden.

In MySQL is het statement ALTER TABLE tabelnaam DROP INDEX Constraintnaam; en voor de ‘meeste’ andere databases is dit ALTER TABLE tabelnaam DROP CONSTRAINT Constraintnaam;

Primary key

De primary key, ofwel primaire sleutel, identificeert ieder record in een tabel. De primary key zorgt ervoor dat ieder veld dat ingevoerd wordt niet leeg mag zijn en dat het een unieke waarde heeft. Per tabel kan er maximaal één primary key gedefinieerd worden.

CREATE TABLE tabelnaam
    (
        kolomnaam1 datatype,
        kolomnaam2 datatype,
        CONSTRAINT Constraintnaam PRIMARY KEY (kolomnaam)
    )

Foreign key

De foreign key, oftewel verwijzende sleutel, verwijst naar data in een andere tabel. Met de foreign key kunnen relaties worden gelegd tussen verschillende tabellen. De syntax voor het aanmaken van een foreign key, ziet er als volgt uit:

CREATE TABLE tabelnaam
    (
        kolomnaam1 datatype,
        kolomnaam2 datatype,
        CONSTRAINT Constraintnaam FOREIGN KEY (kolomnaam)
        REFERENCES tabelnaam(kolomnaam)
    )

In onderstaand voorbeeld wordt de tabel orders gemaakt, in deze tabel wordt het id-nummer opgeslagen, de datum van inboeken en een verwijzing naar het persoonsnummer van tabel Persoon. De kolom persoonNr zal verwijzen naar het het kolom id in de tabel Persoon.

CREATE TABLE Orders
    (
        orderNr int,
        persoonNr int,
        orderDatum datetime,
        CONSTRAINT PK_persoon PRIMARY KEY (id)
        CONSTRAINT FK_Order_personen FOREIGN KEY (persoonNr)
        REFERENCES Persoon(id)
    )