دستور INSERT
در MySQL برای اضافه کردن دادههای جدید به جداول پایگاه داده استفاده میشود. این دستور به کاربران اجازه میدهد تا یک یا چندین رکورد را همزمان در جدول درج کنند.
در این مقاله، نحوه استفاده از INSERT
، روشهای مختلف درج داده و نکات بهینهسازی بررسی میشود.
۱. نحوه استفاده از دستور INSERT
در MySQL
ساختار کلی دستور INSERT
به صورت زیر است:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
🔹 توضیح:
table_name
→ نام جدول(column1, column2, column3, …)
→ نام ستونهایی که داده دریافت میکنند(value1, value2, value3, …)
→ مقادیر مربوط به هر ستون
مثال: درج یک رکورد در جدول
INSERT INTO users (name, email, age)
VALUES ('علی محمدی', 'ali@email.com', 25);
در این مثال، یک کاربر جدید با اطلاعات مشخصشده به جدول users
اضافه میشود.
۲. درج چندین رکورد بهطور همزمان
برای بهینهسازی فرآیند درج داده، میتوان چندین رکورد را در یک دستور INSERT
اضافه کرد:
INSERT INTO users (name, email, age)
VALUES
('محمد رضایی', 'm.rezaei@email.com', 30),
('سارا کریمی', 's.karimi@email.com', 27),
('حسین مرادی', 'h.moradi@email.com', 35);
✅ مزیت: این روش سریعتر از اجرای چندین دستور INSERT
بهصورت جداگانه است.
۳. درج داده در همه ستونها (بدون مشخص کردن نام ستونها)
در صورتی که بخواهید دادهای را برای تمام ستونهای یک جدول وارد کنید، میتوان نام ستونها را حذف کرد. اما ترتیب مقادیر باید مطابق با ترتیب ستونهای جدول باشد:
INSERT INTO users
VALUES (NULL, 'زهرا اکبری', 'z.akbari@email.com', 28);
🔹 نکته: اگر یک ستون مقدار AUTO_INCREMENT
داشته باشد (مثلاً id
)، مقدار NULL
برای آن قرار داده میشود و MySQL مقدار آن را بهطور خودکار افزایش میدهد.
۴. استفاده از INSERT ... SELECT
برای درج داده از یک جدول دیگر
میتوان دادهها را از یک جدول دیگر انتخاب کرده و در جدول جدید درج کرد:
INSERT INTO customers_archive (id, name, email)
SELECT id, name, email FROM customers WHERE active = 0;
✅ کاربرد: انتقال اطلاعات از یک جدول به جدول دیگر (مثلاً بایگانی کردن کاربران غیرفعال).
۵. درج داده با مقدار پیشفرض (DEFAULT
)
اگر یک ستون مقدار پیشفرض داشته باشد، میتوان مقدار DEFAULT
را برای آن تعیین کرد:
INSERT INTO orders (customer_id, status)
VALUES (101, DEFAULT);
✅ نتیجه: مقدار پیشفرضی که در هنگام ایجاد جدول تعیین شده، در ستون status
ثبت خواهد شد.
۶. جلوگیری از درج مقادیر تکراری (INSERT IGNORE
)
برای جلوگیری از خطا هنگام درج مقادیر تکراری (مثلاً روی یک ستون UNIQUE
)، میتوان از INSERT IGNORE
استفاده کرد:
INSERT IGNORE INTO users (email, name, age)
VALUES ('duplicate@email.com', 'کاربر تست', 29);
✅ مزیت: اگر ایمیل از قبل در جدول وجود داشته باشد، این دستور باعث خطا نمیشود و رکورد جدید اضافه نخواهد شد.
۷. درج داده در صورت عدم وجود (INSERT ... ON DUPLICATE KEY UPDATE
)
در برخی موارد، ممکن است بخواهیم در صورتی که یک مقدار (مثلاً ایمیل) قبلاً در جدول وجود داشته باشد، مقدار جدیدی جایگزین آن شود:
INSERT INTO users (email, name, age)
VALUES ('ali@email.com', 'علی محمدی', 25)
ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age);
✅ کاربرد: اگر ایمیل از قبل در جدول موجود باشد، نام و سن کاربر بهروز خواهد شد.
۸. بهینهسازی عملکرد درج دادهها
برای بهبود کارایی هنگام درج حجم بالایی از دادهها:
- استفاده از یک
INSERT
با چندین مقدار: درج چندین رکورد در یک دستور سرعت را افزایش میدهد. - غیرفعال کردن
autocommit
برای حجم بالای دادهها:
✅ مزیت: کاهش تعداد عملیات دیسک و افزایش سرعت درج دادهها.SET autocommit = 0; INSERT INTO users (name, email, age) VALUES ('کاربر ۱', 'user1@email.com', 20); INSERT INTO users (name, email, age) VALUES ('کاربر ۲', 'user2@email.com', 22); COMMIT;
- استفاده از
LOAD DATA INFILE
برای وارد کردن دادههای حجیم از فایل:
✅ مزیت: بسیار سریعتر ازLOAD DATA INFILE 'users.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
INSERT
برای دادههای حجیم.
نتیجهگیری
دستور INSERT
یکی از مهمترین دستورات MySQL برای افزودن داده به جداول است. روشهای مختلفی برای درج داده وجود دارد که بسته به نیاز، میتوان از INSERT IGNORE
، ON DUPLICATE KEY UPDATE
، INSERT ... SELECT
و بهینهسازیهای دیگر استفاده کرد تا عملکرد پایگاه داده بهبود یابد.