我想在表AGENT中添加一个名为email的字段。我希望AGENT.email的值在整个表中是唯一的,我希望这个唯一性不区分大小写。
例如添加" MARY@USA.COM"如果" mary@usa.com"会违反约束条件。已经存在于表中。我该怎么做?
答案 0 :(得分:2)
您可以在表格的lower
电子邮件列中添加唯一索引,如下所示:
create unique index email_unq_idx on agent computed by (lower(email));
答案 1 :(得分:2)
要强加不区分大小写的约束,最好的方法是使用不区分大小写的排序规则创建列,例如unicode_ci_ai
- 此排序规则也是重音不敏感的,您可能想要也可能不想要,并添加一个唯一的该列的约束(或唯一索引):
create table addressbook
(
id integer not null,
emailaddress varchar(150) character set utf8 collate unicode_ci_ai,
constraint pk_addressbook primary key (id),
constraint uc_emailaddress unique (emailaddress)
);
或将字段添加到现有表格中:
alter table addressbook
add emailaddress2 varchar(150) character set utf8
constraint uc_emailaddress2 unique collate unicode_ci_ai
替代归类将是unicode_ci
(仅区分大小写)或其他built-in case insensitive collations,具体取决于所使用的字符集,或create your own specific collation。
此解决方案优于Gurwinder提供的解决方案的优势在于它还允许您不敏感地选择大小写(和重音),而无需在where子句中使用lower
。