我有 2 列 col1 和 col2
初始问题:
是否可以限制不能在此列中两次添加相同的电子邮件,仅使用索引?
问题已被编辑为:“是否可以定义一个约束,以便无法在这些列中为同一记录添加两次相同的电子邮件,仅使用索引? ”
但这是我的错,我没有提供足够的细节。 当我有一个独特的列时。我不能在此列中重复一个条目。我需要将此“唯一”扩展到第二列,以便在第一列中输入的任何条目都不能输入到第二列。
我可以使用外部程序来完成,因此将这两列的条目添加到数组中,并在向这两列输入内容之前始终检查数组。但是这个解决方案是个笑话,它是次优的,因为通过推断我们不再需要数据库,我们可以使用数组。
这可能只使用mysql,还是我需要“我的数组”?
我想你可以使用
CHECK
约束是的,您可以使用语句
CHECK
中的选项来实现此目的CREATE/ALTER TABLE
,但仅适用于自 v8.0.16 起的 MySQL 和自 v10.2.1 起的 MariaDB。参考: 13.1.20.7 CHECK Constraints (MySQL Dev Documentation)和CONSTRAINT (MariaDB KB)
例子
创建表
插入第一条记录
插入将失败并显示消息:
检查表的内容
是的,桌子还是空的。
插入有效记录
...并验证:
...返回:
用相同的数据更新第二列
回报:
用不同的数据更新第二列
这似乎有效。
完整示例
完整的例子可以在db<>fiddle上找到。
今天您允许 2 封电子邮件;明天你将允许 3。这要求有一个单独的桌子。这样会让你使用
UNIQUE
。架构设计规则:不要使用多列来实现“数组”;使用单独的表格。