مقدمة عن INSERT
أمر INSERT يُستخدم لإضافة صفوف جديدة (سجلات) إلى جدول في قاعدة البيانات.
هذا أحد أوامر DML (Data Manipulation Language).
الصيغة الأساسية
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
طرق إضافة البيانات
1. إضافة صف مع تحديد الأعمدة
-- إضافة موظف جديد مع تحديد الأعمدة
INSERT INTO employees (name, age, salary, department_id)
VALUES ('خالد', 27, 4800, 2);
-- التحقق من الإضافة
SELECT * FROM employees WHERE name = 'خالد';
نصيحة
دائماً حدد أسماء الأعمدة. هذا يجعل الكود أوضح ويحميك من الأخطاء إذا تغير ترتيب الأعمدة.
2. إضافة صف بدون تحديد الأعمدة
-- إضافة قيم لجميع الأعمدة بالترتيب
INSERT INTO employees
VALUES (9, 'هند', 25, 4200, 1);
-- يجب أن يتطابق عدد وترتيب القيم مع الأعمدة
تحذير
هذه الطريقة خطيرة لأنها تعتمد على ترتيب الأعمدة. إذا تغير الترتيب، ستدخل البيانات في الأعمدة الخطأ!
3. إضافة صفوف متعددة
-- إضافة عدة موظفين دفعة واحدة
INSERT INTO employees (name, age, salary, department_id)
VALUES
('ريم', 29, 5200, 2),
('سعد', 31, 5800, 1),
('منى', 26, 4500, 3);
-- أسرع من تنفيذ 3 أوامر INSERT منفصلة
4. إضافة مع قيم افتراضية
-- إذا كان للعمود قيمة افتراضية، يمكن تجاهله
INSERT INTO employees (name, age, salary)
VALUES ('يوسف', 28, 4700);
-- department_id سيأخذ قيمته الافتراضية أو NULL
5. إضافة NULL
-- إدخال قيمة فارغة صريحة
INSERT INTO employees (name, age, salary, department_id)
VALUES ('لينا', 24, 4000, NULL);
6. INSERT مع SELECT
-- نسخ بيانات من جدول إلى آخر
INSERT INTO employees_backup (name, age, salary)
SELECT name, age, salary
FROM employees
WHERE department_id = 2;
-- إنشاء نسخة من الموظفين في قسم التقنية
التعامل مع المفتاح الرئيسي
Auto Increment (الزيادة التلقائية)
-- معظم الجداول لها id يزداد تلقائياً
-- لا تحتاج لتحديد قيمته
-- MySQL:
INSERT INTO employees (name, salary)
VALUES ('أمل', 5000);
-- id سيُنشأ تلقائياً
-- SQLite (إذا كان INTEGER PRIMARY KEY):
INSERT INTO employees (name, salary)
VALUES ('أمل', 5000);
معالجة التكرار
-- في MySQL: إضافة أو تحديث إذا كان موجوداً
INSERT INTO employees (id, name, salary)
VALUES (1, 'أحمد', 5500)
ON DUPLICATE KEY UPDATE salary = 5500;
-- في SQLite:
INSERT OR REPLACE INTO employees (id, name, salary)
VALUES (1, 'أحمد', 5500);
-- في PostgreSQL:
INSERT INTO employees (id, name, salary)
VALUES (1, 'أحمد', 5500)
ON CONFLICT (id) DO UPDATE SET salary = 5500;
أخطاء شائعة
-- خطأ: عدد القيم لا يطابق عدد الأعمدة
INSERT INTO employees (name, age)
VALUES ('علي', 30, 5000); -- 3 قيم، 2 أعمدة
-- خطأ: نوع البيانات غير متوافق
INSERT INTO employees (name, age)
VALUES ('علي', 'ثلاثون'); -- age يجب أن يكون رقماً
-- خطأ: انتهاك قيد NOT NULL
INSERT INTO employees (age, salary)
VALUES (30, 5000); -- name مطلوب ولا يقبل NULL
-- خطأ: انتهاك المفتاح الرئيسي
INSERT INTO employees (id, name)
VALUES (1, 'جديد'); -- id = 1 موجود مسبقاً
تمارين للتطبيق
جرب في صفحة التجربة:
- أضف موظفاً جديداً اسمه "عبدالله" عمره 33 وراتبه 6000
- أضف 3 موظفين دفعة واحدة
- أضف منتجاً جديداً في جدول products
- أضف طلباً جديداً في جدول orders
الخلاصة
INSERT INTOلإضافة بيانات جديدة- حدد أسماء الأعمدة دائماً للوضوح
- يمكن إضافة صفوف متعددة بأمر واحد
INSERT ... SELECTلنسخ بيانات من جدول آخر- انتبه لقيود NOT NULL والمفاتيح الرئيسية