在两个 varchar 字段上创建唯一的不区分大小写的约束

问题描述 投票:0回答:3

在Oracle 10g中,如何为两个varchar字段添加唯一的不区分大小写的约束?例如,假设表中已有以下记录:

"Stephen", "Swensen"
"John", "Smith"

以下插入内容无效:

"stephen", "Swensen"
"John", "smith"
"stephen", "swensen"

但是以下插入是有效的:

"Stephen", "Smith"
"John", "Swensen"
sql oracle10g unique-constraint
3个回答
12
投票

我已经设法让它工作了:

CREATE UNIQUE INDEX person_name_upper ON person(
    UPPER(first_name), UPPER(last_name));

7
投票

假设您的表名为 person,名字列和姓氏列分别称为 first_namelast_name,请添加以下唯一约束:

ALTER TABLE person ADD CONSTRAINT person_name_unique
    UNIQUE(LOWER(first_name),LOWER(last_name));

请告诉我我是否正确理解了您的问题并对您的表格布局做出了正确的假设。


0
投票

您需要创建一个新的唯一索引

CREATE UNIQUE INDEX person_name_upper ON person(UPPER(first_name), UPPER(last_name));

CREATE UNIQUE INDEX person_name_upper ON person(LOWER(first_name), LOWER(last_name));

请记住,像 LOWER 或 UPPER 这样的函数在约束内不起作用

CONSTRAINT first_last_name_unique UNIQUE (LOWER(first_name), LOWER(last_name)) *it does not work*
© www.soinside.com 2019 - 2024. All rights reserved.