MYSQL基于查询的触发器

标签 mysql triggers

我有一个名为公司的表。结构如下:

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

fk_company_type 是具有以下值的外键:

HQ
SITE
CUSTOMER
SUPPLIER

我的问题我只希望公司表中的一条记录是 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

最佳答案

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

如何告诉人们失败的问题取决于您的应用程序。

关于MYSQL基于查询的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29984362/

相关文章:

mysql - 如何使用触发器更新另一个数据库中的表?

mysql - 校验和问题 : Upgrading from MySQL version 5. 1 到 5.6

oracle - PLS-00382 : expression is of wrong type Trigger

sql - 如何处理触发器中的错误?

triggers - 触发 "mobileinit"事件

Mysql Trigger和Event在一起?

php - 根据用户类型重定向到另一个页面

mysql - 如何在mysql中保存像🎅🌠🎄🐰这样的符号?

php - 多个 SELECT FROM 多表并按日期排序

php - Woocommerce:从最新订单获取数据