These are ways to automatically create unique numbers for new rows in a table. They help give each row a special ID without you typing it.
AUTO_INCREMENT vs SERIAL vs IDENTITY in SQL
CREATE TABLE table_name ( id INT AUTO_INCREMENT PRIMARY KEY ); -- OR -- CREATE TABLE table_name ( id SERIAL PRIMARY KEY ); -- OR -- CREATE TABLE table_name ( id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY );
AUTO_INCREMENT is mainly used in MySQL.
SERIAL is a shortcut in PostgreSQL for auto-incrementing integers.
IDENTITY is the standard SQL way, used in SQL Server and newer PostgreSQL versions.
CREATE TABLE users ( user_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) );
CREATE TABLE products ( product_id SERIAL PRIMARY KEY, product_name TEXT );
CREATE TABLE orders ( order_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, order_date DATE );
This example creates a table with an AUTO_INCREMENT id in MySQL, adds two employees, and shows their IDs.
CREATE TABLE employees ( emp_id INT AUTO_INCREMENT PRIMARY KEY, emp_name VARCHAR(100) ); INSERT INTO employees (emp_name) VALUES ('Alice'); INSERT INTO employees (emp_name) VALUES ('Bob'); SELECT * FROM employees;
Each method automatically creates a unique number for new rows.
AUTO_INCREMENT is MySQL-specific; SERIAL is PostgreSQL-specific but considered legacy; IDENTITY is the modern standard.
IDENTITY allows more control over how numbers are generated compared to SERIAL.
AUTO_INCREMENT is used in MySQL for automatic numbering.
SERIAL is a PostgreSQL shortcut for auto-incrementing integers.
IDENTITY is the SQL standard and used in SQL Server and newer PostgreSQL versions.
Practice
Solution
Step 1: Understand MySQL auto-numbering
MySQL usesAUTO_INCREMENTto generate unique numbers automatically for columns like primary keys.Step 2: Compare with other keywords
SERIALis PostgreSQL-specific,IDENTITYis SQL standard used in SQL Server and newer PostgreSQL versions, andSEQUENCEis a separate object, not a column keyword.Final Answer:
AUTO_INCREMENT -> Option DQuick Check:
MySQL auto-number = AUTO_INCREMENT [OK]
- Confusing SERIAL with MySQL syntax
- Using IDENTITY in MySQL
- Thinking SEQUENCE is a column keyword
Solution
Step 1: Identify PostgreSQL SERIAL syntax
In PostgreSQL,SERIALis used as a shorthand to create an integer column that auto-increments.Step 2: Check syntax correctness
CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50)); usesid SERIAL PRIMARY KEY, which is valid. Options B and C use MySQL and SQL Server syntax incorrectly in PostgreSQL. CREATE TABLE users (id SEQUENCE PRIMARY KEY, name VARCHAR(50)); uses SEQUENCE incorrectly as a column type.Final Answer:
CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50)); -> Option AQuick Check:
SERIAL syntax in PostgreSQL = CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50)); [OK]
- Using AUTO_INCREMENT in PostgreSQL
- Using IDENTITY without parentheses
- Treating SEQUENCE as a column type
CREATE TABLE products (id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(20));
INSERT INTO products (name) VALUES ('Pen');
INSERT INTO products (name) VALUES ('Pencil');
SELECT * FROM products;
Solution
Step 1: Understand IDENTITY behavior in SQL Server
TheIDENTITY(1,1)means the ID column starts at 1 and increments by 1 automatically for each new row.Step 2: Predict inserted values
Inserting two rows without specifying ID will assign IDs 1 and 2 respectively. The SELECT will show these IDs with names.Final Answer:
[{"id": 1, "name": "Pen"}, {"id": 2, "name": "Pencil"}] -> Option CQuick Check:
IDENTITY auto increments IDs starting at 1 [OK]
- Assuming ID starts at 0
- Expecting null IDs without insert values
- Thinking INSERT needs ID value explicitly
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY, order_date DATE);
What is the error and how to fix it?
Solution
Step 1: Identify AUTO_INCREMENT support
PostgreSQL does not supportAUTO_INCREMENT; this is a MySQL keyword.Step 2: Correct PostgreSQL syntax
UseSERIALorGENERATED AS IDENTITYfor auto-incrementing columns in PostgreSQL.Final Answer:
AUTO_INCREMENT is invalid in PostgreSQL; use SERIAL or IDENTITY instead -> Option AQuick Check:
PostgreSQL uses SERIAL or IDENTITY, not AUTO_INCREMENT [OK]
- Trying to use MySQL syntax in PostgreSQL
- Assuming AUTO_INCREMENT works everywhere
- Ignoring error messages about syntax
AUTO_INCREMENT primary key to PostgreSQL. Which approach correctly preserves auto-increment behavior?Solution
Step 1: Understand MySQL to PostgreSQL migration
MySQL usesAUTO_INCREMENT, but PostgreSQL does not support it directly.Step 2: Use PostgreSQL equivalent
PostgreSQL usesSERIALas a shorthand for auto-increment integer columns, preserving behavior.Final Answer:
Replace AUTO_INCREMENT with SERIAL type for the primary key column -> Option BQuick Check:
MySQL AUTO_INCREMENT -> PostgreSQL SERIAL [OK]
- Leaving AUTO_INCREMENT keyword unchanged
- Using IDENTITY without proper syntax
- Manually managing IDs instead of auto-increment
Ready to prove it?
Pass the test and this pattern moves unknown
