MySQL 检查表是不是仅包含此特定类型
Posted
技术标签:
【中文标题】MySQL 检查表是不是仅包含此特定类型【英文标题】:MySQL check if the table only contains this certain typeMySQL 检查表是否仅包含此特定类型 【发布时间】:2019-12-04 01:03:40 【问题描述】:delimiter $$
CREATE Trigger TreeTest
after insert on trees
for each row
begin
if (select type from trees) != 'oak' OR (select type from trees ) != 'burch' OR (select type from trees ) != 'maple' OR (select type from trees ) != 'tulpin' then
set message_text = 'You do not have the right tree';
end if;
end; $$
delimiter ;
我在 mysql 中使用此代码,但它总是用表中的数据警告触发器,而它不应该我哪里出错了?
目标是检查表中是否只有这三种类型。如果不报错。
【问题讨论】:
您可能想要WHERE NOT IN (...)
而不是这一长串比较。要施加约束,请考虑使用ENUM
列。
提示:a != x or a != y or a != z
对于x
、y
或z
值总是至少有一个返回true,如a
。你的逻辑颠倒了。应该是a=x or a=y or a=z
。
【参考方案1】:
目标是检查表中是否只有这三种类型。如果不报错。
您似乎过于复杂了。如果您想确保给type
列的任何值都属于预定义列表,您可以使用ENUM
column,如下所示:
ALTER TABLE `trees` CHANGE `type` `type` ENUM('oak', 'burch', 'maple', 'tulpin');
通过此设置,您可以放心,除了列表中声明的值之外,列中将永远不允许使用其他值(任何提供未声明值的尝试都会引发错误)。
【讨论】:
【参考方案2】:你有几个选择:
将 type
列数据类型更改为 ENUM('oak', 'burch', 'maple', 'tulpin')
使用类型创建另一个表,将这些树放在那里并在表中使用 type_id (FK)
改为创建 BEFORE INSERT/UPDATE 触发器并检查是否不允许 NEW.type 以防止将具有该类型的记录添加到表中。
【讨论】:
以上是关于MySQL 检查表是不是仅包含此特定类型的主要内容,如果未能解决你的问题,请参考以下文章