sql - 在 SQL 中创建反对称 key

标签 sql mysql unique asymmetric

ALTER TABLE `test` ADD UNIQUE (
`a` ,
`b`
);

我希望在创建这个唯一 key 后,将无法添加 B、A。

例如:“Michael”、“Jackson”,不允许稍后插入“Jackson”、“Michael”。

最佳答案

我假设您的应用程序处理的不是真实姓名。 (因为“Jackson Michael”在英文中是合法的名字。“John David”和“David John”也是如此。)

最简单的方法是使用 CHECK() 约束来强制两列之间按字母顺序排列。

alter table test
add constraint test_alpha_order
check (a < b);

但请注意,您也可能会遇到区分大小写的问题。也就是说,您的 dbms 可能认为 {'Jackson', 'Michael'} 和 {'jackson', 'michael'} 是两个不同的有效值。如果区分大小写是一个问题,我见过的最常见的解决方案是强制使用小写值,就像这样。

alter table test
add constraint test_alpha_order
check (a = lower(a) and
       b = lower(b) and
       a < b );

关于sql - 在 SQL 中创建反对称 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4781834/

相关文章:

mysql - 从 COALESCE 中减去

sql - Postgres 将字符变化视为整数

mysql - 规范在线购物车表

qt - 如何使 QList<QVector3D> 独一无二

android - 指向内容提供者中的加入查询的游标加载器未更新列表

C# SQL 插入命令

php - 选择 mySQL 中具有不同 ID 的最新条目

mysql - 选择具有不同域的行

唯一/保存/更新的Grails问题

spring - 如何使用多个数据源设置 spring data jpa