在 phpMyAdmin 中创建一个约束作为触发器

Posted

技术标签:

【中文标题】在 phpMyAdmin 中创建一个约束作为触发器【英文标题】:Creating a Constraint as a Trigger in phpMyAdmin 【发布时间】:2016-03-07 10:48:33 【问题描述】:

所以我在 phpMyAdmin 中看到了很多触发器示例,但语法对我来说没有意义......我过于简单化了。

我想在 phpMyAdmin 上创建一个约束。我有两张表,一张是 Funds,一张是 Fund_Shares_Purchased。在 Funds 中,有一个属性“total_available”,即可以购买的股票总数。在 Fund_Shares_Purchased 中,有一个属性“数量”,即某人购买了多少股。这两个表在“Fund_Name”属性上相关。

我尝试了以下...

CREATE TRIGGER limitFundShares
BEFORE INSERT ON Fund_Shares_Purchased
BEGIN
    IF (Fund.total_shares < NEW.quantity)
    THEN
        RAISERROR("You can't buy that many shares of the fund!")
    END IF;
END;

任何帮助或指导将不胜感激!

【问题讨论】:

您对Fund.total_shares的使用有何期待? 【参考方案1】:

下面是一个使用 mysql 命令行客户端的测试示例:

create table Fund(total_shares int);
insert into Fund values(10);
create table Fund_Shares_Purchased(quantity int);

delimiter //
create trigger LimitFundShares
    before insert on Fund_Shares_Purchased
    for each row
    begin
      if ((select total_shares from Fund) < new.quantity)
      then
        signal sqlstate '45000' 
         set message_text = "You can't buy that many shares of the fund!";
       end if;
    end//

delimiter ;
insert into Fund_Shares_Purchased values (5);
insert into Fund_Shares_Purchased values (15);
insert into Fund_Shares_Purchased values (7);
select * from Fund_Shares_Purchased;

您应该能够将触发器创建语句粘贴到 phpMyAdmin 中,尽管我还没有测试过。

【讨论】:

不幸的是,它似乎没有。说 IF 行周围的 SQL 语法错误

以上是关于在 phpMyAdmin 中创建一个约束作为触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 phpmyadmin 中创建触发器

如何在 phpmyadmin 中创建触发器,插入后将更新花药表中的字段?

TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin

如何编写唯一约束作为触发器?

PHPMYADMIN 中的过程和触发器

phpmyadmin 导出后缺少外键约束