我在 Yii2
上有一个项目,我想修复注册表单中的一个错误。
这是我的 user_profile
表:
id | email | email_confirmed
____________________________
1 | a@b.c | 0
我在电子邮件列上有一个唯一索引,当用户确认他/她的电子邮件地址时,email_confirmed
列将为 1。
问题来了: 如果用户 1 不确认他/她的电子邮件,则没有其他人可以注册该电子邮件。
我想到的一个解决方案是删除唯一索引并由 PHP 处理它。但它最不适合我。我想知道 MySql 有没有更好的解决方案?
最佳答案
您可以使用函数索引来处理部分索引(MySQL 8.0.13 和更新版本):
CREATE TABLE t
AS SELECT 1 id, 'a@b.c' email, 0 AS email_confirmed
UNION SELECT 2 id, 'a@b.c' email, 1 AS email_confirmed;
和索引:
CREATE UNIQUE INDEX uq_t ON t((CASE WHEN email_confirmed = 1 THEN email END));
尝试插入另一封已确认的电子邮件:
INSERT INTO t(id, email, email_confirmed) VALUES (3, 'a@b.c', 1);
-- Duplicate entry 'a@b.c' for key 'uq_t'
关于MySQL - 唯一确认的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56919696/