A PRIMARY KEY uniquely identifies each row in a table. SERIAL helps create automatic numbers for this key.
PRIMARY KEY and SERIAL behavior in PostgreSQL
CREATE TABLE table_name ( column_name SERIAL PRIMARY KEY, other_column datatype );
SERIAL creates an integer column that auto-increments.
PRIMARY KEY means no two rows can have the same value in this column.
CREATE TABLE users ( user_id SERIAL PRIMARY KEY, username VARCHAR(50) );
CREATE TABLE products ( product_id SERIAL PRIMARY KEY, product_name TEXT );
CREATE TABLE orders ( order_number SERIAL PRIMARY KEY, order_date DATE );
This creates an employees table with an auto-incrementing employee_id as the primary key. It inserts two employees and shows their IDs.
CREATE TABLE employees ( employee_id SERIAL PRIMARY KEY, employee_name VARCHAR(100) ); INSERT INTO employees (employee_name) VALUES ('Alice'); INSERT INTO employees (employee_name) VALUES ('Bob'); SELECT * FROM employees ORDER BY employee_id;
Time complexity: Inserting a row with SERIAL is fast and automatic.
Space complexity: SERIAL uses an integer, so it uses little space.
Common mistake: Forgetting to set PRIMARY KEY means duplicates can happen.
Use SERIAL when you want automatic numbering; use manual keys if you need custom IDs.
PRIMARY KEY makes sure each row is unique.
SERIAL creates automatic numbers for keys.
Together, they help manage unique IDs easily and safely.
Practice
PRIMARY KEY in a PostgreSQL table?Solution
Step 1: Understand the role of PRIMARY KEY
A PRIMARY KEY ensures that each row in a table is unique and can be identified distinctly.Step 2: Compare options with PRIMARY KEY purpose
Only To uniquely identify each row in the table describes uniqueness, which is the main function of PRIMARY KEY.Final Answer:
To uniquely identify each row in the table -> Option DQuick Check:
PRIMARY KEY = unique row ID [OK]
- Confusing PRIMARY KEY with auto-increment behavior
- Thinking PRIMARY KEY allows duplicates
- Mixing PRIMARY KEY with data storage types
Solution
Step 1: Recall correct SERIAL syntax
In PostgreSQL, the correct syntax is to declare the column asid SERIAL PRIMARY KEY.Step 2: Check each option's order and syntax
Only id SERIAL PRIMARY KEY follows the correct order and syntax for SERIAL with PRIMARY KEY.Final Answer:
id SERIAL PRIMARY KEY -> Option BQuick Check:
Correct SERIAL syntax = id SERIAL PRIMARY KEY [OK]
- Placing SERIAL after PRIMARY KEY
- Using INTEGER before SERIAL
- Writing SERIAL before column name
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT);
What will be the result of inserting two rows without specifying
id values?INSERT INTO users (name) VALUES ('Alice');
INSERT INTO users (name) VALUES ('Bob');Solution
Step 1: Understand SERIAL behavior on insert
SERIAL creates an auto-incrementing integer sequence for theidcolumn, so values are assigned automatically if not provided.Step 2: Predict inserted ids for two rows
The first insert gets id=1, the second gets id=2 automatically.Final Answer:
Two rows with ids 1 and 2 automatically assigned -> Option AQuick Check:
SERIAL auto-increments ids = 1, 2 [OK]
- Expecting to provide id manually
- Thinking id defaults to NULL
- Assuming id starts at 0
CREATE TABLE products (
product_id SERIAL,
name TEXT,
PRIMARY KEY (product_id)
);
After successfully inserting a row without specifying
product_id (which auto-assigns 1), which of the following statements will cause an error when inserting data?Solution
Step 1: Understand PRIMARY KEY uniqueness
Theproduct_idis a PRIMARY KEY and must be unique.Step 2: Analyze insert statements for duplicates
After a prior auto-insert with product_id=1, INSERT INTO products (product_id, name) VALUES (1, 'Eraser'); tries to insert product_id=1 again, causing a duplicate key error.Final Answer:
INSERT INTO products (product_id, name) VALUES (1, 'Eraser'); -> Option AQuick Check:
Duplicate PRIMARY KEY value causes error [OK]
- Assuming SERIAL prevents manual duplicate inserts
- Ignoring PRIMARY KEY uniqueness constraint
- Thinking SERIAL auto-updates duplicates
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer TEXT
);
You manually insert a row with
order_id = 100. What happens if you then insert a new row without specifying order_id? Choose the correct behavior.Solution
Step 1: Understand SERIAL sequence behavior with manual inserts
PostgreSQL sequences do not automatically adjust to manual inserts; explicit values do not advance the sequence.Step 2: Predict next sequence value after manual insert
Manual insert of 100 does not call nextval, so sequence next value remains 1; auto insert gets order_id=1.Final Answer:
The new row gets order_id = 1, restarting the sequence -> Option CQuick Check:
SERIAL sequence unaffected by manual inserts [OK]
- Assuming sequence syncs to MAX(id) and continues from 101
- Expecting duplicate key error on next insert
- Thinking manual insert breaks sequence permanently
Ready to prove it?
Pass the test and this pattern moves unknown
