MySQL保留数据,直到没有附加子表

MySQL保留数据,直到没有附加子表,mysql,Mysql,我有点像MySQL noob,所以请耐心听我说,我正试图找到一种方法将某些内容保存在父表中,并要求至少有一个子表绑定外键。希望一个例子有意义 Parent Table ------------ theId int someValue varchar(20)

我有点像MySQL noob,所以请耐心听我说,我正试图找到一种方法将某些内容保存在父表中,并要求至少有一个子表绑定外键。希望一个例子有意义

                         Parent Table
                         ------------
                         theId int
                         someValue varchar(20)
                       /       |            \
                      /        |             \
                     /         |              \
Open Table          /    Completed Table       \ Monitoring Table
------------------ /     ------------------      ------------------
childTableId int         childTableId int        childTableId int
someOtherData blob       someOtherData blob      someOtherData blob
theId int (fk)           theId int (fk)          theId int(fk)
我有3个子数据的所有跟踪不同的事情,这些记录只存在一定的时间,但在所有阶段的父表始终是相同的。如果子数据是引用父表的唯一子表(有时可能有2个),我需要一种方法来确保它不能被删除

帮助?

根据事件(打开、完成、监视),您将调用以下选项之一:

DELETE FROM Open
WHERE theId = 'yourId'
AND theId IN
    ( SELECT theId FROM Completed ) UNION ALL
    ( SELECT theId FROM Monitoring );

DELETE FROM Completed
WHERE theId = 'yourId'
AND theId IN
    ( SELECT theId FROM Open ) UNION ALL
    ( SELECT theId FROM Monitoring );

DELETE FROM Monitoring
WHERE theId = 'yourId'
AND theId IN
    ( SELECT theId FROM Open ) UNION ALL
    ( SELECT theId FROM Completed );
只有在另一个表中找到相同的
ID
时,才会删除记录。您必须在事务中运行此操作。否则,多个用户可能会同时删除不同表中ID相同的记录。

根据事件(打开、完成、监视),您将调用其中一个:

DELETE FROM Open
WHERE theId = 'yourId'
AND theId IN
    ( SELECT theId FROM Completed ) UNION ALL
    ( SELECT theId FROM Monitoring );

DELETE FROM Completed
WHERE theId = 'yourId'
AND theId IN
    ( SELECT theId FROM Open ) UNION ALL
    ( SELECT theId FROM Monitoring );

DELETE FROM Monitoring
WHERE theId = 'yourId'
AND theId IN
    ( SELECT theId FROM Open ) UNION ALL
    ( SELECT theId FROM Completed );

只有在另一个表中找到相同的
ID
时,才会删除记录。您必须在事务中运行此操作。否则,可能会有多个用户同时删除不同表中ID相同的记录。

因此我只需修改select语句,添加ID=1的
,或其他任何内容,因为我想删除select行而不是所有行?只需添加
和theID=whatever
,因此我只需修改select语句以添加
,其中theID=1
或任何内容,因为我想删除select行而不是所有行?只需添加
和theID=whatever
保留计数器在父表中,并在添加和删除子行时inc/dec它们?TBH我不明白您的问题:在添加和删除子行时,父表中的Pkeep计数器和inc/dec计数器?我不明白你的问题:P