إدخال البيانات: INSERT
نضيف بيانات جديدة صحيحة، صفًّا أو صفوفًا. ⏱ نحو 25 دقيقة.
- تضيف صفًّا بأسماء الأعمدة، وتعرف لماذا تُكتب.
- تضيف عدة صفوف في أمر واحد.
- تحصل على رقم الصف الجديد لربطه بجدول آخر.
- تنسخ صفوفًا بـ
INSERT…SELECTوتعالج أخطاء الإدخال.
١إضافة صف
INSERT INTO يضيف صفًّا جديدًا. الطريقة الموصى بها: نكتب أسماء الأعمدة، ثم القيم بالترتيب نفسه:
INSERT INTO products (name, category, price, stock)VALUES ('قهوة تركية', 'مشروبات', 30, 25); SELECT * FROM products WHERE name = 'قهوة تركية';
| id | name | category | price | stock |
|---|---|---|---|---|
| 13 | قهوة تركية | مشروبات | 30 | 25 |
لم نكتب id، فأعطاه النظام الرقم التالي (13). ولو أغفلنا stock لأخذ قيمته الافتراضية 0.
INSERT INTO productsVALUES ('قهوة تركية', 'مشروبات', 30, 25);
INSERT INTO products (name, category, price, stock)VALUES ('قهوة تركية', 'مشروبات', 30, 25);
بلا أسماء الأعمدة، يجب أن تعطي قيمة لكل عمود بترتيبه في الجدول (5 أعمدة)، وإن أُضيف عمود لاحقًا تتعطل كل أوامرك القديمة.
٢عدة صفوف في أمر واحد
INSERT INTO customers (name, city, phone, joined) VALUES ('أسماء الجهني', 'ينبع', '0551000011', '2025-06-01'), ('بشير المحمدي', 'العلا', '0551000012', '2025-06-02'), ('جود البقمي', 'الطائف', '0551000013', '2025-06-02'); SELECT id, name, city FROM customers WHERE id > 9;
| id | name | city |
|---|---|---|
| 10 | لمى العنزي | NULL |
| 11 | أسماء الجهني | ينبع |
| 12 | بشير المحمدي | العلا |
| 13 | جود البقمي | الطائف |
أسرع من ثلاثة أوامر منفصلة، ويُنفَّذ كله أو يُرفض كله.
٣رقم الصف الجديد
بعد إضافة عميل نحتاج رقمه لنضيف له طلبًا. last_insert_rowid() في SQLite، و LAST_INSERT_ID() في MySQL:
INSERT INTO customers (name, city) VALUES ('رهف الثبيتي', 'الطائف');INSERT INTO orders (customer_id, order_date) VALUES (last_insert_rowid(), '2025-06-05'); SELECT o.id, c.name, o.order_date, o.statusFROM orders o JOIN customers c ON c.id = o.customer_idWHERE o.id = (SELECT MAX(id) FROM orders);
| id | name | order_date | status |
|---|---|---|---|
| 13 | رهف الثبيتي | 2025-06-05 | جديد |
لاحظ: حالة الطلب صارت «جديد» تلقائيًّا من DEFAULT 'جديد'.
٤النسخ من جدول إلى آخر: INSERT … SELECT
بدل VALUES نضع استعلامًا، فتُضاف نتيجته كلها. مثال: أرشفة الطلبات المسلّمة:
CREATE TABLE archived_orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, order_date TEXT); INSERT INTO archived_orders (id, customer_id, order_date)SELECT id, customer_id, order_dateFROM ordersWHERE status = 'مُسلَّم'; SELECT COUNT(*) AS archived FROM archived_orders;
| archived |
|---|
| 5 |
٥الأخطاء الشائعة عند الإدخال
INSERT INTO products (name, category, price) VALUES ('بخور', 'أدوات');INSERT INTO customers (name, phone) VALUES ('ضيف', '0551000001');الجوال مسجل لسعود، والعمود UNIQUE.
وعلامة التنصيص المفردة داخل النص تُكتب مرتين:
INSERT INTO products (name, category, price)VALUES ('Children''s Tea', 'مشروبات', 15); SELECT name FROM products WHERE price = 15;
| name |
|---|
| Children's Tea |
توقّع وتحقّق
الطريقة الموصى بها للإدخال:
رقم آخر صف أُضيف في MySQL:
SQLite last_insert_rowid().كيف نكتب it's داخل نص SQL؟
إضافة نتيجة استعلام كاملة:
VALUES.الخلاصة
INSERT INTO t(أعمدة)VALUES(قيم);- عدة صفوف:
VALUES(…), (…), (…); last_insert_rowid()فيSQLiteوLAST_INSERT_ID()فيMySQL.INSERT INTO t(…)SELECT… ينسخ نتيجة استعلام.- علامة
' داخل النص تُكتب ''.
تحدٍّ برمجي: عميلة جديدة وطلبها الأول
متوسطسجّلت عميلة جديدة وطلبت مباشرة. أضفها، ثم أضف طلبها وصنفيه.
- العميلة: الاسم «أسماء الجهني»، المدينة «ينبع»، الجوال
0551000011، الانضمام2025-06-01. - طلب لها بتاريخ
2025-06-01. - في الطلب صنفان: قهوة عربية (رقم 1) قطعتان بسعر 35، وهيل (رقم 9) قطعة بسعر 28.
👀 اعرض النتيجة المطلوبة
| name | city | joined |
|---|---|---|
| أسماء الجهني | ينبع | 2025-06-01 |
| order_date | status |
|---|---|
| 2025-06-01 | جديد |
| product_id | qty | price |
|---|---|---|
| 1 | 2 | 35 |
| 9 | 1 | 28 |
| COUNT(*) |
|---|
| 13 |
- الكود يعمل بلا أخطاء
- العميلة مسجلة ببياناتها
- لها طلب واحد بالتاريخ الصحيح
- في الطلب الصنفان الصحيحان
- لم تتغير بقية الطلبات
💡 تلميح 1
last_insert_rowid().💡 تلميح 2
last_insert_rowid()، فأدخل الصنفين في أمر واحد، أو اكتب رقم الطلب 13 صراحة.حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
INSERT INTO customers (name, city, phone, joined)VALUES ('أسماء الجهني', 'ينبع', '0551000011', '2025-06-01'); INSERT INTO orders (customer_id, order_date)VALUES (last_insert_rowid(), '2025-06-01'); INSERT INTO order_items (order_id, product_id, qty, price) VALUES ((SELECT MAX(id) FROM orders), 1, 2, 35), ((SELECT MAX(id) FROM orders), 9, 1, 28);