mysql - SQL delete all rows for all children -
is possible in mysql delete children recursively based on parent table?
suppose have
+-------+ |tbl1.id| +-------+ +-------+--------------------------+ |tbl2.id|tbl2.parentid (fk tbl1.id)| +-------+--------------------------+ +-------+--------------------------+ |tbl3.id|tbl3.parentid (fk tbl2.id)| +-------+--------------------------+
now, can't delete rows tbl1 because tbl2 has references tbl1.id, , can't delete tbl2 because tlb3 has references tbl2.
is possible generate sql query using mysql list order tables have deleted? or lists dependency of tables, starting farthest child?
i don't want drop tables, delete rows of set of tables , children, , children, ...
currently have several scripts, 1 per parent table delete children, i'd automate that.
edit 1: database in development mode, new tables , constraints still being added it.
i don't own database, doesn't have cascade delete. could add cascade delete copy sent me, work using scripts have today.
lets want delete rows on tbl1 id equal 5, , related rows in tables : tbl2 , tbl3, can in single transaction 1 :
start transaction delete tbl3 exists (select 1 tbl2 join tbl1 on tbl1.id = tbl2. parentid , tbl1.id = 5 id = tbl3.parentid); delete tbl2 exists (select 1 tbl1 id = tbl2.parentid , id = 5); delete tbl1 id = 5; commit
if follow convention naming fields on tables, can generate script dynamically plsql querying information_schema.tables views :
select table_name, column_name information_schema.tables t join information_schema.columns c on c.table_name = t.table_name , table_schema = 'db_name' table_schema = 'db_name' , table_name 'tbl_' , column_name 'parentid' order table_name desc
Comments
Post a Comment