الدرس 7

إضافة البيانات INSERT

الوحدة الثالثة: التعديل على البيانات مدة القراءة: 15 دقيقة

مقدمة عن 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 موجود مسبقاً

تمارين للتطبيق

جرب في صفحة التجربة:

  1. أضف موظفاً جديداً اسمه "عبدالله" عمره 33 وراتبه 6000
  2. أضف 3 موظفين دفعة واحدة
  3. أضف منتجاً جديداً في جدول products
  4. أضف طلباً جديداً في جدول orders

الخلاصة

  • INSERT INTO لإضافة بيانات جديدة
  • حدد أسماء الأعمدة دائماً للوضوح
  • يمكن إضافة صفوف متعددة بأمر واحد
  • INSERT ... SELECT لنسخ بيانات من جدول آخر
  • انتبه لقيود NOT NULL والمفاتيح الرئيسية