devnotes.

INSERT: Adding Data

Basic syntax

INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);

Always list the columns explicitly — it keeps your code working after someone adds a column.

INSERT INTO students (roll_no, name_en, name_bn, email, age, admitted_on)
VALUES ('CSE-101', 'Rahim Uddin', 'রহিম উদ্দিন', 'rahim@example.com', 20, '2024-01-15');

Multiple rows at once

INSERT INTO students (roll_no, name_en, age, admitted_on) VALUES
  ('CSE-102', 'Karim Ali',  21, '2024-01-15'),
  ('CSE-103', 'Fatema Begum', 19, '2024-02-01'),
  ('CSE-104', 'Nusrat Jahan', 22, '2024-02-01');

One multi-row insert is far faster than many single inserts because it is one round trip and one transaction.

Insert from a query

INSERT INTO alumni (name_en, department, graduated_on)
SELECT name_en, department, CURDATE()
FROM students
WHERE cgpa >= 3.5;

Handling duplicates

-- skip rows that violate a unique key
INSERT IGNORE INTO students (roll_no, name_en, admitted_on)
VALUES ('CSE-101', 'Duplicate', '2024-03-01');

-- upsert: insert, or update if the key already exists
INSERT INTO students (roll_no, name_en, admitted_on)
VALUES ('CSE-101', 'Rahim U.', '2024-01-15')
ON DUPLICATE KEY UPDATE name_en = VALUES(name_en);

-- MySQL 8.0.19+ preferred alias form
INSERT INTO students (roll_no, name_en, admitted_on)
VALUES ('CSE-101', 'Rahim U.', '2024-01-15') AS new
ON DUPLICATE KEY UPDATE name_en = new.name_en;

-- REPLACE = delete the old row, then insert (loses other columns!)
REPLACE INTO students (roll_no, name_en, admitted_on)
VALUES ('CSE-101', 'Rahim U.', '2024-01-15');

Getting the generated id

INSERT INTO students (roll_no, name_en, admitted_on)
VALUES ('CSE-105', 'Tanvir', CURDATE());

SELECT LAST_INSERT_ID();   -- per-connection, safe under concurrency

Bulk loading a file

LOAD DATA LOCAL INFILE '/tmp/students.csv'
INTO TABLE students
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(roll_no, name_en, age, admitted_on);

This is the fastest way to import large datasets — often 20× faster than row-by-row inserts.

MySQL INSERT Statement with Examples | DevNotes