【问题标题】:Answers Trigger Before Update mysql?在更新 mysql 之前触发?
【发布时间】:2022-12-05 10:29:32
【问题描述】:
create table Property4Rent
(
    PropertyNo char(4),
    Street varchar(30),
    City varchar(30),
    Postcode varchar(10),
    Type_p varchar(10),
    Rooms int,
    Rent int,
    OwnerNo char(4),
    StaffNo varchar(4),
    BranchNo char(4)
);
INSERT INTO Property4Rent
VALUES('PA14', '10 Holland', 'Abend',NULL,'House', 6, 650, 'CO46','SA9','B007');
INSERT INTO Property4Rent
VALUES('PG16', '5 Novar', 'Glasgow',NULL,'Flat', 4, 450, 'CO93','SG14',NULL);
INSERT INTO Property4Rent
VALUES('PG21', '19 Dale', 'Glasgow',NULL,'House', 5, 600, 'CO87','SG37','B003');
INSERT INTO Property4Rent
VALUES('PG36', '2 Manor', 'Glasgow',NULL,'Flat', 3, 375, 'CO93','SG37','B003');
INSERT INTO Property4Rent
VALUES('PG4', '5 Lawrence', 'Glasgow',NULL,'Flat', 3, 350, 'CO40',NULL,'B003');
INSERT INTO Property4Rent
VALUES('PG97', '7 Muir', 'Abend',NULL,NULL, NULL, NULL, NULL,'SA9',NULL);
INSERT INTO Property4Rent
VALUES('PL94', '8 Argyll', 'London',NULL,'Flat', 4, 800, 'CO87','Sl41','B005');

创建一个触发器来实现以下约束:伦敦公寓有房间号 3人以上,最低房租必须800。格拉斯哥的公寓房间数量多 2人以上,最低租金300

【问题讨论】:

  • 在你的家庭作业上寻求一点帮助并没有错。欢迎初学者,但我们希望您首先真诚地尝试回答。尽管我们非常愿意帮助您修复您编写的代码的问题。 How do I ask and answer homework questions?

标签: mysql triggers


【解决方案1】:

要在 MySQL 中创建一个触发器来强制执行您指定的约束,您可以使用以下代码:

DELIMITER $$

CREATE TRIGGER property_rent_check
BEFORE INSERT ON Property4Rent
FOR EACH ROW
BEGIN
  IF NEW.City = 'London' AND NEW.Rooms < 4 AND NEW.Rent < 800 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'London apartments must have at least 4 rooms and rent of at least 800';
  END IF;

  IF NEW.City = 'Glasgow' AND NEW.Rooms < 3 AND NEW.Rent < 300 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Glasgow apartments must have at least 3 rooms and rent of at least 300';
  END IF;
END$$

DELIMITER ;

此代码创建一个名为 property_rent_check 的触发器,该触发器在将新行插入 Property4Rent 表之前执行。触发器检查新行的 City 值是否为“London”或“Glasgow”,如果是,它会检查 Rooms 和 Rent 值是否满足指定的约束。如果不满足约束,触发器将使用 SIGNAL 语句引发错误。

您可以通过尝试将违反约束的新行插入 Property4Rent 表来测试此触发器。例如,以下 INSERT 语句应该失败并显示一条错误消息:

INSERT INTO Property4Rent
VALUES('PG50', '1 Main St', 'London', NULL, 'Flat', 3, 700, 'CO93', 'SG37', 'B003');

错误信息应该是:“London apartments must have at least 4 rooms and rent of at least 800”。

【讨论】:

  • 我不知道如何编写触发器更新 if else type (Room>4 and City='London') then update the column Rent=800 what should I do
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多