mysql - 触发器和多列主键

标签 mysql triggers primary-key

我有一张书 table 和一张音乐 table 。这两个表都以 Product_ID 作为主键。我还有一个产品表,其中包含 Product_ID 列和类型列(0 表示书籍,1 表示音乐),其中 Product_Id 和 Type 列是表的主键。在 phpMyAdmin 中,这两列带有下划线,并且表的 SHOW COLUMNS 显示标记为主键的 Type 和 Product_Id。

我遇到的问题是我的触发器。有 2 个触发器,处理不同的表时有一些差异。例如音乐触发器执行此语句:

 INSERT INTO products 
 SET 
      Type=1, 
      Product_Id=NEW.Product_ID,
      Title=NEW.Album, 
      Price=0

书籍触发器是相同的,除了 type=0 并且 NEW.Album 被 NEW.Title 替换。但是,当我现在运行 INSERT 查询时,在插入和删除一些数据后,我收到重复的主键错误。问题是 MySQL 数据库仅读取 Product_ID 列作为主键,因此当它尝试在那里插入重复项时,即使 Type 列中的值不同,它也会发出此错误。我被难住了。

产品表

Product_Id  int(11) - PK
Title   int(11)
Price   double
Type    int(11) - PK
NewBool tinyint(1)

音乐表

Product_ID  int(11) - PK
Artist  varchar(32)
Album   varchar(32)
Genre   varchar(32)
Year    int(11)
Length  double
Rating  double
NumRatings  int(11)
Studio  varchar(64)

图书表

Product_ID  int(11)  - PK
ISBN    bigint(20)
Title   text
Author  text
Year    int(11)
Genre   text
Pages   int(11)
Publisher   text
Edition int(11)
Rating  double
NumRatings  int(11)

最佳答案

您似乎忘记了删除产品中行的触发器。如果您更新了图书或音乐中的数据,您还需要一个触发器来对产品进行相应的更改。

这是你现在的问题 http://sqlfiddle.com/#!2/be9c93/1

这是我修复它的方法 http://sqlfiddle.com/#!2/2ff27/2

关于mysql - 触发器和多列主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13523548/

相关文章:

php - 为新行轮询 MySQL 表的最快方法是什么?

language-agnostic - 为 ID 列推荐什么数据类型?

MySQL 自动递增编号问题

Python 3 mySQL.connector 卡住导入库

javascript - 在 javascript 中,将自定义事件附加到文档本身是不好的做法吗?

mysql - 按子串分组

sql-server - 在 sql server 中使用 ON DELETE CASCADE 删除触发器问题

hibernate - @OneToOne 与 @JoinColumn 双向映射

mysql - 邻接列表模型或嵌套集模型,我应该使用哪种数据模型来存储分层数据?

php - 查询失败时脚本不重定向