Mysql 行在另一个 table 中发生不相关的插入操作后被删除

Mysql rows getting deleted after an unrelated insertion action happens in another table

我会尽可能简单地解释这一点,因为它涉及到一个电子商务音乐网站。

所以我有一个基于 CakePHP 的应用程序网站,它是一个电子商务网站,我们销售在线音乐。

我遇到的问题是,在有人购买专辑后,该专辑的流派行被删除,然后该专辑不包含任何详细说明其所属音乐流派的行。

简单来看:

  1. id=65 的专辑包含流派 5,7 和 10。这就是 table 详细描述流派的样子:

    album_genre (table)

      fk_genre   fk_album
         12         87
         9          87
         5          65
         7          65
         10         65
    

用户购买 id=65 的相册后,包含该 fk_album id 的 album_genre table 行被删除。

      fk_genre   fk_album
         12         87
         9          87

用户购买专辑后会发生什么?

  1. 用户使用卡或店内信用支付
  2. 如果接受付款,则继续创建 MusicItem 行:

    2.1 MusicItem row contains:
           fk_album, fk_receipt, fk_user, downloads
    
  3. 继续增加专辑中专辑的销量 table

当有人购买相册时,或在任何其他地方(除非您在要添加到商店的后端...

我怀疑这可能是数据库的问题?我似乎无法在日志或调试日志或任何东西中找到问题 =/ 需要一些想法帮助来解决此错误。

更新:

更新二:

我会先检查触发器。 听起来您的代码试图根据销售额减少您的专辑库存,这显然是错误的。所以我会 运行 查看触发器。

此外,我会在您的代码中查找对 album_genre table 的引用。它可能是 PHP 中的某个东西,在销售完成时被调用。

Check/search 用于任何级联关键字。我的猜测是使用级联与另一个 table 相关的已删除记录。

Check/search 用于任何级联关键字。我的猜测是与另一个 table 使用级联关联的已删除记录。

你试过 'SHOW_TRIGGERS' root 吗?

我终于想通了,

最重要的是修复我重新创建 table 的问题。旧的(有问题的)table 看起来像这样:

  fk_genre   fk_album
     5          37
     9          37
     12         89
     3          89
     67         89      

新的(有效的)table 结构如下所示:

  id   fk_genre   fk_album
   1      5          37
   2      9          37
   3      12         89
   4      3          89
   5      67         89

这个问题与 table 中的一些混淆有关,因为没有设置 INDEX,只有两个主键 fk_genre 和 fk_album。

我想如果我添加一个索引,它肯定会有助于数据结构和顺序,留下用 INDEX id 区分每一行的工作,而不是 fk_genre 和 fk_album 的组合, 它奏效了!

编辑:

忘记提到处理 table 的 AlbumGenre.php 的模型 class 没有指定主键设置,所以我猜 CakePHP 也有对于将什么用作主键感到困惑,并且可能使用了两者中的任何一个。

 public  $primaryKey = 'id';