How to Insert Data in SQL
What you’ll build or solve
You’ll add one or more rows to an existing table.
When this approach works best
Inserting data works best when you:
Learn SQL on Mimo
- Add new users, orders, or products
- Seed a database with starter data
- Store results from another query in a table
For example, you might insert a new user into users, add a purchase to orders, or copy filtered records into a reporting table.
This is a bad idea if you need to change existing rows. Use UPDATE when you want to modify records that are already there.
Prerequisites
- Access to the database
- Permission to insert into the target table
- Basic SQL knowledge
Step-by-step instructions
Step 1: Insert rows with VALUES
Use INSERT INTO ... VALUES when you already know the values you want to store.
Single row
INSERTINTO users (username, email)
VALUES ('alex','alex@example.com');
Batch multiple rows using the same syntax
INSERTINTO users (username, email)
VALUES
('mia','mia@example.com'),
('leo','leo@example.com'),
('noah','noah@example.com');
If your table has an auto-incrementing ID, omit that column:
INSERTINTO users (username, email)
VALUES ('sam','sam@example.com');
What to look for
- Column names must exist in the table
- Value order must match the column list
- Data types must match column definitions
- Required columns without defaults must be included
Step 2: Insert data from query results
Use INSERT INTO ... SELECT when you want to insert rows produced by a query.
INSERTINTO active_users (id, username, email)
SELECT id, username, email
FROM users
WHERE is_active=TRUE;
This pattern is common for archiving, reporting, or staging data.
What to look for
- The number and order of selected columns must match the target table
- Data types must be compatible
- Filters in the
SELECTcontrol which rows get inserted
Examples you can copy
Example 1: Add a new product
INSERTINTO products (name, price, stock)
VALUES ('Laptop Stand',29.99,100);
Example 2: Create starter users
INSERTINTO users (username, email)
VALUES
('jordan','jordan@example.com'),
('sasha','sasha@example.com');
Example 3: Copy completed tasks into an archive table
INSERTINTO completed_tasks (id, title, completed_at)
SELECT id, title, completed_at
FROM tasks
WHERE status='done';
Common mistakes and how to fix them
Mistake 1: Mismatched column counts
What you might do:
INSERTINTO users (username, email)
VALUES ('alex');
Why it breaks: The number of values does not match the number of columns.
Correct approach:
INSERTINTO users (username, email)
VALUES ('alex','alex@example.com');
Mistake 2: Missing required columns
What you might do:
INSERTINTO users (username)
VALUES ('alex');
Why it breaks: If email is NOT NULL and has no default, the insert fails.
Correct approach:
INSERTINTO users (username, email)
VALUES ('alex','alex@example.com');
Mistake 3: Duplicate primary keys
What you might do:
Bash
INSERTINTO users (id, username, email)
VALUES (1,'newuser','new@example.com');
Why it breaks: If id = 1 already exists, the database blocks the insert.
Correct approach: Let the database assign IDs when possible, or insert a value that does not conflict.
Troubleshooting
- If you see “permission denied,” confirm you have
INSERTprivileges. - If you see “column does not exist,” check spelling and casing.
- If you see “duplicate key value violates unique constraint,” inspect primary and unique keys.
- If you see a data type error, confirm your values match the column types.
Quick recap
- Use
INSERT INTO ... VALUESto insert known values - Batch inserts by listing multiple value tuples
- Use
INSERT INTO ... SELECTto insert query results - Match column counts, order, and types
- Include required fields and avoid key conflicts
Join 35M+ people learning for free on Mimo
4.8 out of 5 across 1M+ reviews
Check us out on Apple AppStore, Google Play Store, and Trustpilot