Constraints & Integrity: Functions
Module: Schema Design & Advanced DDL
## Complete Constraint Syntax
**Table-level constraints (defined after columns):**
```sql
CREATE TABLE example (
id SERIAL,
email VARCHAR(255),
age INT,
-- Primary key
CONSTRAINT pk_example PRIMARY KEY (id),
-- Unique
CONSTRAINT uq_example_email UNIQUE (email),
-- Check
CONSTRAINT chk_example_adult CHECK (age >= 18),
-- Foreign key
CONSTRAINT fk_example_parent FOREIGN KEY (parent_id)
REFERENCES parent_table(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
```
**Column-level constraints (defined with column):**
```sql
CREATE TABLE example (
id SERIAL PRIMARY KEY, -- Column-level primary key
email VARCHAR(255) UNIQUE NOT NULL, -- Column-level unique and not null
age INT CHECK (age >= 18), -- Column-level check
parent_id INT REFERENCES parent_table(id) -- Column-level foreign key
);
```
**Foreign key with all options:**
```sql
FOREIGN KEY (column_name)
REFERENCES parent_table(parent_column)
ON DELETE [CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION]
ON UPDATE [CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION]
```
**Composite constraints:**
```sql
-- Composite primary key
PRIMARY KEY (column1, column2)