mysql删除触发器

mysql删除触发器,mysql,triggers,Mysql,Triggers,因此,我有三张表: tbl_client(clientpk, name, etc) tbl_address(address_pk, street1, street2 etc) tbl_client_address (client_address_pk, clientpk_fk, addresspk_fk) 我对触发器不太熟悉,因此也许有人可以告诉我如何实现这一点,当我删除一个客户端时,它也会删除tbl\u client\u地址中的条目。我知道这可以通过引用来实现,但问题是,由于删除了tbl\

因此,我有三张表:

tbl_client(clientpk, name, etc)
tbl_address(address_pk, street1, street2 etc) 
tbl_client_address (client_address_pk, clientpk_fk, addresspk_fk)
我对触发器不太熟悉,因此也许有人可以告诉我如何实现这一点,当我删除一个客户端时,它也会删除
tbl\u client\u地址中的条目。我知道这可以通过引用来实现,但问题是,由于删除了
tbl\u客户地址
,我还希望删除与该客户相关的地址


有可能吗?

如果您使用的是innodb,则可以向主表添加约束:

约束
myForeignKey
外键(
typeId
) 更新级联上删除级联上的引用
类型
id


如果您正在使用innodb,您不必乱动触发器,您可以向主表添加一个约束:

约束
myForeignKey
外键(
typeId
) 更新级联上删除级联上的引用
类型
id



删除客户机记录时,您希望删除地址记录,这一事实表明您可能根本不需要tbl_客户机地址解析表,而不必处理触发器。如果一个给定地址实际上可以与多个客户机关联,则只需要tbl_客户机地址表(如果是这种情况,则不希望基于tbl_客户机记录的删除自动级联删除)。所以我想说的是,你应该考虑是否只需要一个tbl_address.clientpk_fk字段就足够了,完全删除tbl_客户端地址表,然后使用Jeff的建议约束级联tbl_客户端记录删除。

删除客户端记录时希望删除地址记录的事实表明,您可能根本不需要tbl_客户端地址解析表。如果一个给定地址实际上可以与多个客户机关联,则只需要tbl_客户机地址表(如果是这种情况,则不希望基于tbl_客户机记录的删除自动级联删除)。所以我想说的是,您应该考虑是否只需要一个tbl_address.clientpk_fk字段就足够了,完全删除tbl_client_address表,然后使用Jeff建议的约束来级联tbl_客户端记录删除。

您使用的是innoDB还是myisam?我使用的是innoDB,最初我做了一个引用,但发现如果我这样做,它只会删除将客户端和地址绑定在一起的记录,但地址本身仍然存在于其各自的表中。您使用的是innoDB还是myisam?我使用的是innoDB,最初我做了一个引用,但发现如果我这样做,它只会删除将客户端和地址绑定在一起的记录,但地址本身仍然存在于相应的表中。是的,这是我的第一个解决方案,但我发现,当我从tbl_客户端删除记录时,它会从tbl_客户端地址删除相关记录,但是,与该记录相关的地址仍然存在。我正在尝试或想要实现的是,当我从客户端删除a记录时,它也会删除相关的地址,而不仅仅是将它们绑定在一起的记录。+1。。。因为任何时候你都可以避免触发器。是的,这是我的第一个解决方案,但我发现,当我从tbl_客户端删除记录时,它会从tbl_客户端地址删除相关记录,但是与该记录相关的地址仍然存在。我正在尝试或想要实现的是,当我从客户端删除a记录时,它也会删除相关的地址,而不仅仅是将它们绑定在一起的记录。+1。。。因为任何时候你都可以避免触发,你可能应该这样做。事实上,我确实需要tbl_客户地址,因为有些客户有不止一个地址(邮寄、账单、总部等)。实际上,我已经成功地将fk引用到tbl_客户端地址中的主表中,但这意味着当我需要在代码中执行此操作时,我需要使用tbl_客户端地址的pk,而不是tbl_客户端的pk。仅仅因为有多个地址与一个客户端关联,并不需要tbl_客户端地址解析桌子这可以通过使用外键让多个tbl_地址记录指向tbl_客户机记录来处理。只有当两个外部表之间存在真正的多对多关系时,才需要分辨率表。。。aka客户与多个地址关联,地址需要与多个客户关联。是的,我理解,我只暗示了我的3个表,但实际上地址表也用于供应商、员工、联系人、项目地点等。这也适用于我的联系信息表(电话号码、电子邮件、传真等)。到目前为止,我遇到的唯一障碍是,当我删除一个客户端时,我希望与它相关的地址也消失。我可以只做一个delete*FROM tbl_client_address WHERE=id_client(并将FK引用到主表)但这让我有点担心,因为我不知道使用这种方法会有什么陷阱。明白了。我最担心的陷阱是一个叫做“触发器”的陷阱,lol。在我的职业生涯中,有一次我忽略了避免使用比我更高级的数据库开发人员提供的建议,并且不得不学习触发器确实会导致一些严重的令人沮丧的问题的艰难方法。有时它们确实是最佳选择,但并不经常。实际上,我确实需要tbl_客户端地址,因为其中一些有不止一个地址(邮寄、计费、总部等)。实际上,我将fk引用到tbl_客户端地址的主表中,但这意味着当我需要在代码中执行此操作时,我需要使用tbl_客户端地址的pk,而不是tbl_客户端的pk。因为关联的地址不止一个