Column constraints help keep your data clean and correct by setting simple rules on what values can be stored in each column.
Column constraints (NOT NULL, UNIQUE, CHECK) in PostgreSQL
CREATE TABLE table_name ( column_name data_type CONSTRAINT constraint_name constraint_type, ... ); -- Examples of constraint_type: -- NOT NULL -- UNIQUE -- CHECK (condition)
Constraints are added when creating or altering a table.
CHECK constraints use a condition to allow only valid values.
CREATE TABLE users ( id SERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, age INT CHECK (age >= 18) );
CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(100) NOT NULL, price NUMERIC CHECK (price > 0) );
This creates an employees table with constraints: name cannot be empty, email must be unique if given, and salary must be at least 30000. The last insert will fail because salary is less than 30000.
CREATE TABLE employees ( employee_id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, salary NUMERIC CHECK (salary >= 30000) ); INSERT INTO employees (name, email, salary) VALUES ('Alice', 'alice@example.com', 50000), ('Bob', NULL, 40000), ('Charlie', 'charlie@example.com', 25000);
NOT NULL means the column must have a value; it cannot be empty.
UNIQUE means no two rows can have the same value in that column.
CHECK lets you define a rule that values must follow, like a minimum or maximum.
Use NOT NULL to require a value in a column.
Use UNIQUE to prevent duplicate values.
Use CHECK to enforce custom rules on column values.
Practice
Solution
Step 1: Understand the NOT NULL constraint
NOT NULL means the column must always have a value; it cannot be left empty.Step 2: Compare with other constraints
UNIQUE prevents duplicates but allows NULLs; CHECK enforces custom rules; PRIMARY KEY implies NOT NULL and UNIQUE but is more specific.Final Answer:
NOT NULL -> Option BQuick Check:
NOT NULL = no empty values [OK]
- Confusing UNIQUE with NOT NULL
- Thinking CHECK prevents NULLs
- Assuming PRIMARY KEY is the only way to disallow NULL
email in a table users?Solution
Step 1: Recall the syntax for adding UNIQUE constraint
The correct syntax is: ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);Step 2: Match the syntax with options
ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email); matches the correct syntax exactly, naming the constraint and specifying the column.Final Answer:
ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email); -> Option AQuick Check:
ADD CONSTRAINT name UNIQUE (column) [OK]
- Omitting CONSTRAINT keyword
- Placing UNIQUE before CONSTRAINT name incorrectly
- Not specifying column in parentheses
CREATE TABLE products (
id SERIAL PRIMARY KEY,
price NUMERIC CHECK (price > 0),
sku TEXT UNIQUE
);
What happens if you try to insert
price = -5 and sku = 'A123'?Solution
Step 1: Analyze the CHECK constraint on price
The CHECK constraint requires price > 0, so negative values like -5 violate this rule.Step 2: Consider the UNIQUE constraint on sku
Since 'A123' is new, UNIQUE is not violated here.Final Answer:
Insert fails due to CHECK constraint violation on price -> Option CQuick Check:
CHECK (price > 0) rejects negative price [OK]
- Ignoring CHECK constraint effects
- Confusing UNIQUE violation with CHECK violation
- Assuming negative numbers are allowed
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
age INT CHECK (age >= 18)
);
Which statement will cause an error when inserting data?
Solution
Step 1: Check NOT NULL constraint on email
Email cannot be NULL because of NOT NULL constraint.Step 2: Check CHECK constraint on age
Age must be 18 or older; the ages in A(25), B(20), and D(18) all satisfy this.Final Answer:
INSERT with NULL email causes error due to NOT NULL constraint -> Option DQuick Check:
NOT NULL rejects NULL email [OK]
- Focusing on CHECK constraint instead of NOT NULL
- Ignoring NOT NULL on email
- Assuming UNIQUE causes error on first insert
orders where the quantity column must be a positive integer and the order_code must be unique and never empty. Which is the best column definition for quantity and order_code?Solution
Step 1: Ensure quantity is positive integer
CHECK (quantity > 0) enforces positive values only, better than >= 0 which allows zero.Step 2: Ensure order_code is unique and not empty
UNIQUE prevents duplicates; NOT NULL disallows empty; this combination ensures order_code is unique and present.Final Answer:
quantity INT CHECK (quantity > 0), order_code TEXT UNIQUE NOT NULL -> Option AQuick Check:
CHECK positive + UNIQUE NOT NULL = correct constraints [OK]
- Allowing zero quantity
- Missing NOT NULL on unique column
- Using CHECK without NOT NULL for order_code
Ready to prove it?
Pass the test and this pattern moves unknown
