DDL — Data Definition Language
1. SQL Overzicht
| Categorie | Statements | Doel |
|---|---|---|
| DDL | CREATE, ALTER, DROP | Structuur van database-objecten |
| DQL | SELECT | Data opvragen |
| DML | INSERT, UPDATE, DELETE | Data manipuleren |
| DCL | GRANT, REVOKE | Rechten beheren |
2. Tabellen Aanmaken
Schema & dbo
- Schema = namespace voor database-objecten
- dbo = default schema (database owner)
- Notatie:
schema.tabelbv.dbo.Customers
Tijdelijke tabellen
| Type | Syntax | Zichtbaar voor |
|---|---|---|
| Lokaal | #tabelnaam |
Huidige sessie |
| Globaal | ##tabelnaam |
Alle sessies |
3. Tabellen Wijzigen
Object Explorer → tabel → rechtermuisklik → Design
4. Tabellen Verwijderen
Warning
Een tabel verwijderen met een FK-constraint geeft een fout. Verwijder eerst de child table of de constraint.
5. Tabel Info Opvragen
-- Overzicht kolommen, constraints, keys
EXEC sp_help 'dbo.Customers';
-- Overzicht indexen
EXEC sp_helpindex 'dbo.Customers';
Via SSMS: rechtermuisklik op tabel → Script Table as → CREATE To
6. Data Types
| Type | Omschrijving |
|---|---|
CHAR(n) |
Vaste lengte tekst — ongebruikte ruimte wordt gevuld met spaties |
VARCHAR(n) |
Variabele lengte tekst — max n karakters |
TEXT |
Lange tekst |
TINYINT |
0 – 255 |
SMALLINT |
-32,768 – 32,767 |
INT |
-2,147,483,648 – 2,147,483,647 |
BIGINT |
Zeer groot geheel getal |
DECIMAL(p,s) |
Decimaal getal — p = totaal cijfers, s = na komma |
DATE |
Datum (YYYY-MM-DD) |
DATETIME |
Datum + tijd |
TIMESTAMP |
Automatisch tijdstempel |
Eigen datatypes aanmaken
7. NULL Waarden
NULL= onbekend — niet hetzelfde als 0 of lege stringNULL + 1=NULL— elke berekening met NULL geeft NULLNULL = NULLisFALSE— gebruik altijdIS NULL
-- Zoeken op NULL
SELECT * FROM customers WHERE creditLimit IS NULL;
-- NULL vervangen door een standaardwaarde
SELECT customerName, COALESCE(creditLimit, 0) AS creditLimit
FROM customers;
8. Data Integriteit
| Type | Omschrijving |
|---|---|
| Declaratief | Constraints (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, NOT NULL) |
| Procedureel | Triggers — code die automatisch uitvoert bij INSERT/UPDATE/DELETE |
9. Declarative Integrity Constraints
Primary Key
- Identificeert elk record uniek via 1 of meerdere kolommen
- Enkel unieke, niet-NULL waarden
- Elke tabel heeft max. 1 primary key
-- Inline
CREATE TABLE Persons (
ID INT NOT NULL PRIMARY KEY,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Age INT
);
-- Als named constraint
CREATE TABLE Person (
ID INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Age INT,
CONSTRAINT PK_Person PRIMARY KEY (ID)
);
Unique Constraint
- Vergelijkbaar met PK maar meerdere per tabel mogelijk
- NULL-waarden zijn wel toegestaan (in tegenstelling tot PK)
-- Inline
CREATE TABLE Persons (
ID INT NOT NULL UNIQUE,
LastName VARCHAR(255) NOT NULL
);
-- Als named constraint
CREATE TABLE Persons (
ID INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
CONSTRAINT UC_Person UNIQUE (ID)
);
Check Constraint
- Beperkt de mogelijke waarden — record wordt niet toegevoegd als niet voldaan
-- Enkelvoudig
CREATE TABLE Persons (
Age INT CHECK (Age >= 18)
);
-- Meervoudig als named constraint
CREATE TABLE Persons (
Age INT,
City VARCHAR(255),
CONSTRAINT CHK_Person CHECK (Age >= 18 AND City = 'Antwerp')
);
Foreign Key
- Verwijst naar de PK van een andere tabel
- Tabel met FK = child table
- Tabel met de PK = parent table / referenced table
-- Inline
CREATE TABLE Orders (
OrderID INT NOT NULL PRIMARY KEY,
OrderNumber INT NOT NULL,
PersonID INT FOREIGN KEY REFERENCES Persons(PersonID)
);
-- Als named constraint
CREATE TABLE Orders (
OrderID INT NOT NULL,
OrderNumber INT NOT NULL,
PersonID INT,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY REFERENCES Persons(PersonID)
);
Referentiële Integriteit
Bij INSERT of UPDATE met FK die niet bestaat → foutmelding:
UPDATE statement conflicted with COLUMN FOREIGN KEY constraint 'FKemployee'.
The conflict occurred in database 'sample', table 'employee', column 'dept_no'.
4 opties voor gedrag bij wijziging/verwijdering in parent table:
| Optie | Gedrag |
|---|---|
NO ACTION |
Enkel wijzigingen in parent table die geen invloed hebben op child — anders fout |
CASCADE |
Wijziging/verwijdering in parent table → automatisch doorgevoerd in child table |
SET NULL |
Wijziging/verwijdering in parent → FK in child wordt NULL gezet |
SET DEFAULT |
Wijziging/verwijdering in parent → FK in child wordt op default waarde gezet |
CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
ON DELETE CASCADE
ON UPDATE SET NULL
10. Hernoemen van Database Objecten
USE ClassicModels;
GO
-- Tabel hernoemen
EXEC sp_rename @objname = 'Offices', @newname = 'Department';
-- Kolom hernoemen
EXEC sp_rename @objname = 'Employees.jobTitle', @newname = 'title';
Werkt ook voor: database, view, stored procedure.