🗄️SQL Templates
INSERT Data Patterns
Insert single rows, multiple rows, and data from SELECT queries
Explanation
Add new records to database tables with various INSERT patterns.
Examples
Insert single row
Input
INSERT INTO users (name, email)
Output
Adds one new user
Insert multiple rows
Input
INSERT INTO users VALUES (...), (...)
Output
Adds multiple users at once
Code Examples
SQL
-- Insert single row
INSERT INTO users (name, email, status)
VALUES ('John Doe', 'john@example.com', 'active');
-- Insert multiple rows
INSERT INTO users (name, email, status)
VALUES
('Alice', 'alice@example.com', 'active'),
('Bob', 'bob@example.com', 'pending'),
('Charlie', 'charlie@example.com', 'active');
-- Insert with auto-increment ID
INSERT INTO users (name, email)
VALUES ('Jane', 'jane@example.com');
-- ID is generated automatically
-- Insert and return ID (PostgreSQL)
INSERT INTO users (name, email)
VALUES ('Jane', 'jane@example.com')
RETURNING id;
-- Insert and return ID (MySQL)
INSERT INTO users (name, email)
VALUES ('Jane', 'jane@example.com');
SELECT LAST_INSERT_ID();
-- Insert from SELECT
INSERT INTO archived_users (name, email, archived_at)
SELECT name, email, NOW()
FROM users
WHERE status = 'deleted';
-- Insert with default values
INSERT INTO users (name, email)
VALUES ('Test', DEFAULT);
-- Insert or ignore duplicates (MySQL)
INSERT IGNORE INTO users (email, name)
VALUES ('existing@example.com', 'Name');
-- Insert or ignore (SQLite)
INSERT OR IGNORE INTO users (email, name)
VALUES ('existing@example.com', 'Name');
-- Upsert (ON CONFLICT - PostgreSQL)
INSERT INTO users (email, name, updated_at)
VALUES ('user@example.com', 'John', NOW())
ON CONFLICT (email)
DO UPDATE SET
name = EXCLUDED.name,
updated_at = EXCLUDED.updated_at;
-- Upsert (MySQL)
INSERT INTO users (email, name, updated_at)
VALUES ('user@example.com', 'John', NOW())
ON DUPLICATE KEY UPDATE
name = VALUES(name),
updated_at = VALUES(updated_at);💡 Tips
- Always specify column names for maintainability
- Use bulk inserts for multiple rows (much faster)
- Validate data before INSERT
- Handle unique constraint violations
- Use transactions for multiple INSERTs
- Consider batch size for large imports
- Use RETURNING to get inserted data
⚠️ Common Pitfalls
- Missing required columns causes errors
- Duplicate keys violate unique constraints
- Large single inserts can lock tables
- Auto-increment gaps are normal
- Default values may not be what you expect
- Time zone issues with timestamps