سيكون من السهل الحصول على شيء مثل هذا:
knex.schema.dropTable('users', true);
//OR
knex.schema.cascade().dropTable('users');
من شأنه أن يولد:
DROP TABLE users CASCADE;
نفس الشيء لـ .truncate
+1
حسنًا ، هذه لهجة محددة. والأسوأ من ذلك أنه وفقًا لوثائق MySQL ، يُسمح باستخدام الكلمة الرئيسية CASCADE
ولكنها لا تفعل شيئًا على الإطلاق. (جانبا ، تتجاهل MySQL بصمت قيود CHECK
وهذا الشيء قليلاً في الماضي).
أعتقد أنه إذا قمنا بتضمين هذه الوظيفة (التي أريدها) ، فهناك إما أن يكون هناك حاجة إلى تطبيق احتياطي للهجات التي تفتقر إلى تطبيق مناسب CASCADE
أو ، إذا لم تكن هناك طريقة لتنفيذها مع وجود احتياطي ، والخطأ يجب رميها.
على سبيل المثال ، في MySQL يمكنك الاستعلام عن INFORMATION_SCHEMA.KEY_COLUMN_USAGE
وإنشاء رسم بياني موجه لقاعدة البيانات مع عقد لكل مجموعة table_name + '.' + column_name
وحواف من REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
إلى TABLE_NAME.COLUMN_NAME
. تقوم بعد ذلك بإجراء فرز طوبولوجي على الرسم البياني ويمنحك ترتيب الإسقاط. لقد فعلت هذا ، وهو يعمل بشكل جيد. الشيء الجيد في استخدام INFORMATION_SCHEMA
أيضًا هو أن التطبيق يجب أن يكون قابلاً للنقل عبر لهجات SQL. سواء أكان هذا صحيحًا أم لا ، فهي قصة مختلفة تمامًا.
التعليق الأكثر فائدة
حسنًا ، هذه لهجة محددة. والأسوأ من ذلك أنه وفقًا لوثائق MySQL ، يُسمح باستخدام الكلمة الرئيسية
CASCADE
ولكنها لا تفعل شيئًا على الإطلاق. (جانبا ، تتجاهل MySQL بصمت قيودCHECK
وهذا الشيء قليلاً في الماضي).أعتقد أنه إذا قمنا بتضمين هذه الوظيفة (التي أريدها) ، فهناك إما أن يكون هناك حاجة إلى تطبيق احتياطي للهجات التي تفتقر إلى تطبيق مناسب
CASCADE
أو ، إذا لم تكن هناك طريقة لتنفيذها مع وجود احتياطي ، والخطأ يجب رميها.على سبيل المثال ، في MySQL يمكنك الاستعلام عن
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
وإنشاء رسم بياني موجه لقاعدة البيانات مع عقد لكل مجموعةtable_name + '.' + column_name
وحواف منREFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
إلىTABLE_NAME.COLUMN_NAME
. تقوم بعد ذلك بإجراء فرز طوبولوجي على الرسم البياني ويمنحك ترتيب الإسقاط. لقد فعلت هذا ، وهو يعمل بشكل جيد. الشيء الجيد في استخدامINFORMATION_SCHEMA
أيضًا هو أن التطبيق يجب أن يكون قابلاً للنقل عبر لهجات SQL. سواء أكان هذا صحيحًا أم لا ، فهي قصة مختلفة تمامًا.