【发布时间】: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
-
谢谢,但不是一个选项。