Merlin <[EMAIL PROTECTED]> wrote on 10/09/2005 01:31:17 PM:

> Hi there,
> 
> I am wondering if there is a possiblity to delete rows in more than one 
> table with one query.
> 
> At the moment I am doing this:
> 
> I do have at the moment 3 querys!:
>    # get table1_id
>    SELECT table1_id
>    from ...
>    WHERE ID = ...
> 
>    # delete dependent entry
>    DELETE
>        FROM $DB.$T5
>    WHERE
>        ID = '$data[table1_id]'
>    LIMIT 1
> 
>    # delete main entry
>    DELETE
>        FROM $DB.$T4
>    WHERE
>        ID = '$data[id]'
>    LIMIT 1
> 
> Is there a better solution as this?
> 
> Thanx for any hint,
> 
> Merlin
> 

Have you considered RTFM?  http://dev.mysql.com/doc/mysql/en/delete.html

There are two forms that accept multiple tables as the targets of the 
deletion and as the determinates for the deletion. I would still run two 
separate queries, just to make sure there was no 
parent-child-deletion-sequence race condition:

DELETE FROM child
USING parent p
INNER JOIN child c
        ON c.parent_id = p.id
WHERE p.id = ...;

DELETE FROM parent
WHERE id = ...;

The other suggestion about cascading deletes would only work if both 
tables are InnoDB and you have defined the appropriate foreign key (as 
described).

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

Reply via email to