【问题标题】:MYSQL Trigger based on query基于查询的MYSQL触发器
【发布时间】:2015-05-01 09:20:39
【问题描述】:

我有一张叫公司的桌子。结构如下:

company
-----------------------------
company_id       integer
company_name     varchar
fk_company_type  varchar
created_date     date

fk_company_type 是具有以下值的外键:

HQ
SITE
CUSTOMER
SUPPLIER

我的问题是,我只希望公司表中的一条记录是 HQ(HeadQuarters)。因此,我需要一个触发器来计算公司表中有多少 HQ。如果计数返回 1 并且插入的新记录的值为 fk_company_type = HQ,则插入被中止。

任何有关最佳方式的帮助将不胜感激。此外,我已经有一个触发器,它为 company_id 和日期生成一个 UUID。希望这不会影响我想要实现的目标。

phpadmin 触发器(时间:BEFORE,事件:INSERT)

BEGIN
SET NEW.company_id=UUID_SHORT();
SET NEW.created_date=current_timestamp();
END

我已经尝试了基本布局并做到了这一点,但它会产生语法错误,这是我做到了多远。

BEGIN   
    IF fk_company_type = "HQ" THEN
        DECLARE valid_number int;
        SELECT COUNT(*) into valid_number FROM company WHERE fk_company_type = "HQ";
        IF valid_number > 0 THEN 

                -- some error message
        END IF;
    END IF;
    SET NEW.company_id=UUID_SHORT();
    SET NEW.created_date=current_timestamp();
END

【问题讨论】:

  • 您最好制作一个不同的总部表,并且只允许其中包含唯一的 company_ids
  • 谢谢,但不是一个选项。

标签: mysql triggers


【解决方案1】:

中止插入的一种简单方法是将值设置为非法值。 例如,如果列设置为 NOT NULL,则将值设置为 NULL,插入将失败。

你如何告诉别人它失败的问题/问题取决于你的应用程序。

【讨论】:

  • 感谢我的触发器编码不是编码,我正在寻求一些帮助来编写它。我已经尝试了基础知识,但出现语法错误。
  • 请参阅上面的更新代码,了解我在触发器上的距离
  • 没有看到我猜测的语法错误。当您使用 count() 之类的函数时,您需要一个 GROUP BY 子句:select count(company_ID) into valid_number from company where fk_company_type="HQ" group by company_ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多