如何将空字符串设置为空值以允许可选字段中出现重复的空字符串



我有一个可选的电子邮件字段。正则表达式接受空字符串 (^$( 工作正常,但现在的问题是空字符串被视为唯一条目。它只允许一个用户在不输入电子邮件地址的情况下注册。我知道我必须将其设置为 null,但不确定如何设置。

像这样:

键"users_email_unique"空字段的重复条目">

错误:密钥"电子邮件"的重复条目">

您可以使用部分索引:

CREATE UNIQUE INDEX idx_unq_tab_email ON tab(email) WHERE TRIM(email) <> '';

DBFiddle 演示

这样,您仍然UNIQUE约束加上原始值。

创建一个触发器,用于在插入或更新时将空白转换为空值:

create trigger null_email
before insert or update on users
for each row
new.email = nullif(old.email, '')

或在插入时将空白转换为空值:

insert into users (..., email, ...)
values (..., nullif(?, ''), ...)

触发器是更好的方法,因为它处理来自任何源的数据,而方法 2 要求每个应用程序的插入/更新 SQL 符合"无空白"规则。

相关内容

最新更新