使用where条件创建唯一索引



现在我有了下面的users表,如果id的前缀为auth0|,则希望电子邮件列是唯一的。

id 文本
电子邮件 文本不为空
CREATE UNIQUE INDEX auth0_users_email_idx 
ON users ((CASE WHEN id NOT LIKE 'auth0|%' THEN email END));

如果前缀匹配,则CASE返回NULL,不检查其唯一性。否则,它将返回电子邮件。

但是MySQL不允许对TEXT列进行索引。在索引表达式中,更改列数据类型或将值CAST为CHAR。

演示小提琴

PS。注意双括号——它们是强制性的。外括号封装索引表达式,内括号封装表达式,converse为标量值。

最新更新