gpt4 book ai didi

MySQL - 唯一确认的电子邮件

转载 作者:可可西里 更新时间:2023-11-01 08:23:23 26 4
gpt4 key购买 nike

我在 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'

db<>fiddle demo

关于MySQL - 唯一确认的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56919696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com