使用触发器根据外键插入值

时间:2016-03-26 13:39:59

标签: mysql triggers

我在mysql数据库中有以下表格:

项目

Column              Type            Null Default    Links to    Comments    MIME
item_id (Primary)   int(11)         No              
FK_item_category    int(11)         Yes  NULL   item_category -> item_category_id       
item_name           varchar(45)     Yes  NULL           
item_description    varchar(45)     Yes  NULL           
item_price          decimal(5,2)    Yes  NULL           

item_category

Column                      Type        Null    Default Links to    Comments    MIME
item_category_id (Primary)  int(11)     No              
item_category_name          varchar(45) Yes     NULL    

顺序

Column              Type            Null    Default           Links to  Comments    MIME
order_id (Primary)  int(11)         No              
FK_order_user_email varchar(45)     Yes     NULL              user -> user_email        
order_time          datetime        Yes     CURRENT_TIMESTAMP           
order_pickup_time   time(6)         Yes     NULL            
order_instructions  varchar(45)     Yes     NULL            
order_gross_total   decimal(10,2)   Yes     NULL            
order_net_total     decimal(10,2)   Yes     NULL    

order_detail

Column                      Type            Null    Default Links to    Comments    MIME
order_details_id (Primary)  int(11)         No              
FK_order_id                 int(11)         Yes     NULL    order -> order_id       
FK_order_item_id            int(11)         Yes     NULL    item -> item_id     
order_detail_unit_price     decimal(5,2)    Yes     NULL            
order_detail_quantity       int(11)         Yes     NULL    

我也有其他表,但我特意试图在这些表上创建一个触发器。

我正在尝试创建一个触发器,根据外键 fk_order_item_id item_price 添加到 order_detail 表中。触发器将在插入后运行,并在更新后运行。

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:0)

我建议不要以这种方式使用触发器。我认为应用程序服务是更新表的正确位置。如果必须在数据库中,则考虑使用存储过程。您应该考虑如何实现这些表的安全性。使用存储过程可能会有所帮助,因为您可以为用户授予过程的权限,但不能为表授予权限。

触发器可用于在插入或检查某些标准之前进行计算。

我相信您应用中的服务是解决您问题的最佳方案。它应该处理更新和安全性。在您的情况下,它可能需要多个服务。一个用于创建订单,可能一个用于在下订单后进行更新。也许是另一个删除订单等...