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 对于xyz 值总是至少有一个返回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 检查表是不是仅包含此特定类型的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是仅包含特定字符? [复制]

MySQL - 检查连续列是不是相同并仅显示那些行

通过在 Sql 中使用表名中的特定单词检查表是不是存在

如何检查表是不是包含特定列?

检查列是不是包含类型字符串(对象)

有没有办法检查 MySQL 字典的元素是不是包含特定的整数?