MYSQL基于查询触发

时间:2015-05-01 09:20:40

标签: mysql triggers

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

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和date生成一个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

1 个答案:

答案 0 :(得分:0)

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

你告诉别人失败的问题取决于你的申请。