如何检查外键对象是否属于某种类型
How can I check if the foreign key object is of a certain type
此问题已简化以减少混乱。
在我的数据库中有 2 个 table。 1 table "product" 和 1 table "notification"。
该产品可以有 3 种类型,由枚举 ( ENUM('SERVER', 'SERVICE', 'APPLICATION')
) 定义。
通知包含产品的外键及其 ID。
当我创建通知时,我想检查给定的 ForeignKey 是否属于 'APPLICATION' 类型。我可以进行这样的检查吗?如果是这样,这是由 CHECK
完成的吗?
据我所知,我唯一可以检查的是一个值(例如 CHECK(foo > 0)
)
如果它是一个枚举,您应该能够检查该值是否等于您想要的结果。
加入您的 tables,然后使用 where 子句过滤掉您不想要的结果。您没有提供 table 的完整详细信息,因此我将举一个简单的示例来说明您想要做什么。我的枚举是列 "type".
简化形式:
SELECT *
FROM products
WHERE type = 'APPLICATION'
最简单的方法是一个触发器 Before Insert
和第二个触发器 Before Update
。
你可以SELECT
你的外国人键值在触发器中测试它,并释放一个错误。
看看CHECK constraint in MySQL is not working
的第二个答案
Like this :
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
此问题已简化以减少混乱。
在我的数据库中有 2 个 table。 1 table "product" 和 1 table "notification"。
该产品可以有 3 种类型,由枚举 ( ENUM('SERVER', 'SERVICE', 'APPLICATION')
) 定义。
通知包含产品的外键及其 ID。
当我创建通知时,我想检查给定的 ForeignKey 是否属于 'APPLICATION' 类型。我可以进行这样的检查吗?如果是这样,这是由 CHECK
完成的吗?
据我所知,我唯一可以检查的是一个值(例如 CHECK(foo > 0)
)
如果它是一个枚举,您应该能够检查该值是否等于您想要的结果。
加入您的 tables,然后使用 where 子句过滤掉您不想要的结果。您没有提供 table 的完整详细信息,因此我将举一个简单的示例来说明您想要做什么。我的枚举是列 "type".
简化形式:
SELECT *
FROM products
WHERE type = 'APPLICATION'
最简单的方法是一个触发器 Before Insert
和第二个触发器 Before Update
。
你可以SELECT
你的外国人键值在触发器中测试它,并释放一个错误。
看看CHECK constraint in MySQL is not working
的第二个答案Like this :
DELIMITER $$ CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test` FOR EACH ROW BEGIN IF CHAR_LENGTH( NEW.ID ) < 4 THEN SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT := 'check constraint on Test.ID failed'; END IF; END$$ DELIMITER ;