【问题标题】:Prevent a specific UPDATE in MySQL防止 MySQL 中的特定 UPDATE
【发布时间】:2013-12-22 18:23:19
【问题描述】:

我的表中有这一列:

  `Status` VARCHAR(5) NULL DEFAULT 0 COMMENT 'DRAFT, SENT, or TRASH\nSENT cannot update to DRAFT\n' ,
    CONSTRAINT chk_Status CHECK (`Status` IN ('SENT', 'DRAFT', 'TRASH', NULL))

我想要做的是防止将“SENT”的Status 更新为“DRAFT”的Status

编辑:这是我想出的触发器,但在语法上它似乎不正确。有什么建议吗?

TRIGGER update_Status
  BEFORE UPDATE ON `Status` WHERE `Status` = 'SENT'
  ON `EMAIL` FOR EACH ROW
  DENY UPDATE ON `Status` TO 'DRAFT',

【问题讨论】:

  • 您可能需要UPDATE TRIGGER 之类的东西。

标签: mysql sql sql-update constraints mysql-workbench


【解决方案1】:

试试这个:

DELIMITER /
CREATE TRIGGER update_status
BEFORE UPDATE ON Status 
FOR EACH ROW
BEGIN
  DECLARE wrong_status CONDITION FOR SQLSTATE '45123';
  IF new.status = 'DRAFT' AND old.Status = 'SENT' Then
     SIGNAL SQLSTATE '45123'
     SET MESSAGE_TEXT = 'Status cannot be changed from SENT to DRAFT';
  END IF;
END;
/
DELIMITER ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多