هل يعتمد DROP TABLE تحديثات سابقة داخل المعاملة في MySQL؟

متقدمقراءة دقيقةآخر تحديث 2 أكتوبر 2026

SQL قواعد البيانات

الإجابة

لا يقتصر أثر DROP TABLE لجدول عادي في MySQL على إزالة ذلك الجدول. فهو من الأوامر التي تسبب اعتمادًا ضمنيًا، وبالتالي قد يعتمد تغييرات سابقة كانت لا تزال معلقة داخل المعاملة الحالية. لهذا يمكن أن يبقى تعديل على جدول آخر رغم تنفيذ ROLLBACK بعد أمر الحذف.

لنفترض أننا عدلنا راتب موظف داخل معاملة، ثم حذفنا جدول أحداث عاديًا لا يرتبط بالموظفين. قد يبدو أن العمليتين منفصلتان بسبب اختلاف الجدولين، لكن حدود المعاملة تتأثر بالأمر الثاني. لا يشترط أن يستهدف DROP الجدول المعدل نفسه حتى يعتمد التحديث السابق في الجلسة الحالية.

مثال

START TRANSACTION;
UPDATE employees SET salary = 1500 WHERE id = 1;
DROP TABLE events;
ROLLBACK;

يفترض المثال أن جدول الأحداث عادي وليس مؤقتًا، وأن الحذف ينجح. من الأفضل فصل تغييرات البنية عن المعاملات التي نعتمد على إمكانية إلغائها، مع فهم حدود كل خطوة قبل التنفيذ.

باختصار: قد يجعل DROP TABLE التحديث السابق معتمدًا، فلا يلغيه ROLLBACK اللاحق.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

ما قيمة salary في الاستعلام الأخير، علمًا بأن events جدول عادي وليس مؤقتًا؟

CREATE TABLE employees (
  id INT PRIMARY KEY,
  salary INT NOT NULL
) ENGINE = InnoDB;
CREATE TABLE events (
  id INT PRIMARY KEY
) ENGINE = InnoDB;
INSERT INTO employees VALUES (1, 1000);
INSERT INTO events VALUES (1);
START TRANSACTION;
UPDATE employees SET salary = 1500 WHERE id = 1;
DROP TABLE events;
ROLLBACK;
SELECT salary FROM employees WHERE id = 1;