MySQL استعلام الحذف: كيفية حذف صف من الجدول
⚡ ملخص ذكي
MySQL تحذف استعلامات DELETE الصفوف غير الضرورية من الجدول، وتعيد عدد الصفوف المتأثرة. يشرح هذا المورد صيغة DELETE، وتصفية WHERE، وحذف عدة صفوف باستخدام IN، والبدائل الأكثر أمانًا TRUNCATE وDROP.

ما هو استعلام الحذف؟
استخدم MySQL حذف تُستخدم عبارة DELETE لحذف الصفوف غير الضرورية من جدول قاعدة البيانات. فهي تحذف الصف بأكمله من الجدول، ثم تُعيد عدد الصفوف المحذوفة. تُعدّ عبارة DELETE مفيدةً عند الحاجة إلى مسح البيانات المؤقتة أو القديمة من قاعدة البيانات.
استعلام الحذف في MySQL يمكن حذف أكثر من صف واحد من جدول في عملية تنفيذ واحدة. وهذا مفيد عند حذف عدد كبير من الصفوف من جدول قاعدة البيانات.
بمجرد حذف صف من قاعدة البيانات، لا يمكن استعادته. لذا، احرص دائمًا على إنشاء نسخة احتياطية من قاعدة البيانات قبل حذف البيانات، حتى تتمكن من استعادتها ومراجعتها لاحقًا عند الحاجة.
كيفية حذف صف في MySQL
بعد أن أصبح الغرض من البيان واضحًا، تأتي الخطوة التالية وهي صياغة الجملة. لحذف صف في MySQL، يتم استخدام عبارة DELETE FROM:
DELETE FROM `table_name` [WHERE condition];
هنا:
- حذف من `table_name` يحكي MySQL الخادم لإزالة الصفوف من الجدول المسمى.
- [أين الشرط] هذا الخيار اختياري ويستخدم لتطبيق عامل تصفية يقيد عدد الصفوف المتأثرة باستعلام الحذف.
إذا كان حيث الشرطية لا يستخدم في MySQL استعلام الحذف، ثم الكل سيتم حذف الصفوف في جدول معين.
⚠️ تحذير: قم بتشغيل عامل التصفية كاستعلام SELECT أولاً. إذا أعاد بالضبط الصفوف التي تنوي حذفها، فإن استعلام DELETE المطابق يكون آمناً. تجد الصيغة الكاملة موثقة في MySQL دليل حذف البيان.
مثال MySQL حذف الاستعلام
يقوم القسم التالي بإنشاء مجموعة بيانات صغيرة ثم يقوم بحذف البيانات منها.
الخطوة 1: إدخال بيانات نموذجية
قبل أن نخوض في مناقشة أكثر تفصيلاً حول عبارة SQL DELETE، دعونا ندرج بعض البيانات النموذجية في جدول الأفلام للعمل عليها.
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7); INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8); INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);
يؤدي تنفيذ البرنامج النصي أعلاه إلى إضافة ثلاثة (3) أفلام إلى جدول الأفلام. قبل المتابعة، دعونا نستعرض جميع الأفلام الموجودة في جدولنا.
SELECT * FROM `movies`;
يؤدي تنفيذ البرنامج النصي أعلاه إلى النتائج التالية. تم تمييز الصفوف الثلاثة المُضافة حديثًا.
| movie_id | الاسم | مدير | year_released | معرف الفئة |
|---|---|---|---|---|
| 1 | قراصنة الكاريبي 4 | روب مارشال | 2011 | 1 |
| 2 | نسيان سارة مارشال | نيكولاس ستولر | 2008 | 2 |
| 3 | X رجال | اغية | 2008 | اغية |
| 4 | Code الاسم: بلاك | إدغار جيمز | 2010 | اغية |
| 5 | بنات أبي الصغيرات | اغية | 2007 | 8 |
| 6 | الملائكة والشياطين | اغية | 2007 | 6 |
| 7 | دافينشي Code | اغية | 2007 | 6 |
| 9 | Honey moonالمتطلبات البيئية | جون شولتز | 2005 | 8 |
| 16 | 67% مذنب | اغية | 2012 | اغية |
| 18 | الديكتاتور العظيم | تشارلي شابلن | 1940 | 7 |
| 19 | فيلم تجريبي | مجهول | اغية | 8 |
| 20 | فيلم 3 | جون براون | 1920 | 8 |
الخطوة الثانية: حذف صف واحد
لنفترض أن مكتبة فيديوهات Myflix لم تعد ترغب في تأجير فيلم "الديكتاتور العظيم" وتريد حذفه من قاعدة البيانات. رقم تعريف الفيلم هو 18، لذا يقوم البرنامج النصي أدناه بحذف هذا السطر.
DELETE FROM `movies` WHERE `movie_id` = 18;
تنفيذ البرنامج النصي أعلاه في MySQL منضدة يقوم هذا الأمر بحذف الفيلم ذي المعرف 18 من الجدول الموجود في قاعدة بيانات Myflix.
لنلقِ نظرة الآن على الحالة الحالية لجدول الأفلام.
SELECT * FROM `movies`;
| movie_id | الاسم | مدير | year_released | معرف الفئة |
|---|---|---|---|---|
| 1 | قراصنة الكاريبي 4 | روب مارشال | 2011 | 1 |
| 2 | نسيان سارة مارشال | نيكولاس ستولر | 2008 | 2 |
| 3 | X رجال | اغية | 2008 | اغية |
| 4 | Code الاسم: بلاك | إدغار جيمز | 2010 | اغية |
| 5 | بنات أبي الصغيرات | اغية | 2007 | 8 |
| 6 | الملائكة والشياطين | اغية | 2007 | 6 |
| 7 | دافينشي Code | اغية | 2007 | 6 |
| 9 | Honey moonالمتطلبات البيئية | جون شولتز | 2005 | 8 |
| 16 | 67% مذنب | اغية | 2012 | اغية |
| 19 | فيلم تجريبي | مجهول | اغية | 8 |
| 20 | فيلم 3 | جون براون | 1920 | 8 |
NOTE:
- لم يعد الفيلم ذو المعرف 18 يظهر في مجموعة نتائج الاستعلام.
- لا يمكنك حذف عمود واحد من جدول باستخدام أمر DELETE. يزيل هذا الأمر صفًا كاملاً. لمسح حقل واحد، استخدم استعلام التحديث هذا يُعيّن قيمة العمود إلى NULL.
الخطوة 3: حذف صفوف متعددة تحتوي على IN
لنفترض أن لدينا قائمة أفلام نريد حذفها. بدلاً من تنفيذ عبارة واحدة لكل صف، يمكننا دمج عبارة WHERE مع عامل التشغيل IN.
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
يؤدي تنفيذ البرنامج النصي أعلاه إلى حذف الأفلام التي تحمل المعرفات 20 و 21 من جدول الأفلام لدينا في عملية واحدة.
الحذف مقابل الاقتطاع مقابل الإسقاط MySQL
لا يُعدّ الحذف الطريقة الوحيدة لإزالة البيانات من MySQL. غالباً ما يلجأ المبتدئون إلى هذا الخيار عندما يكون هناك أمر أسرع يناسب بشكل أفضل، لذا يقارن الجدول أدناه أوامر الإزالة الثلاثة.
| الميزات | حذف | اقتطاع | إسقاط |
|---|---|---|---|
| نوع الأمر | DML | DDL | DDL |
| حيث الشرطية | عائلات | غير معتمد | غير معتمد |
| ما الذي تمت إزالته؟ | الصفوف المحددة | جميع الصفوف | صفوف وبنية الجدول |
| العودة | ممكن داخل المعاملة | غير ممكن (التزام ضمني) | غير ممكن (التزام ضمني) |
| زيادة تلقائية | يتم الاحتفاظ بالعداد | تتم إعادة ضبط العداد إلى قيمة البداية | تتم إزالة المنضدة مع الطاولة |
| السرعة على الطاولات الكبيرة | ببطء (صفًا تلو الآخر) | سريع جدا | سريع جدا |
استخدم أمر الحذف (DELETE) عندما تحتاج إلى فلتر أو القدرة على التراجع. اقتطاع الجدول عند الرغبة في إفراغ جدول بسرعة وإعادة ضبط عداد الترقيم التلقائي (AUTO_INCREMENT)، استخدم الأمر DROP فقط عندما لا يكون الجدول نفسه مطلوبًا، لأنه يزيل تعريفه مع البيانات.
