我的表中有一个varchar
列用于url值。我必须在不区分大小写的记录中使它独一无二。
我找到了两种方法来实现它。
在该字段上创建唯一索引。
create unique index <index_name> on <tablename>(lower(<column_name>))
在字段上添加唯一约束
ALTER TABLE person ADD CONSTRAINT person_name_unique
UNIQUE(LOWER(first_name),LOWER(last_name));
从上述选择中采用的有效方法是什么?
答案 0 :(得分:13)
更有效的方法是第一种方法。但是,效率更高,只是因为后一种语法不起作用。遗憾的是,您不能像创建唯一索引一样创建基于函数的约束。
唯一约束不起作用
SQL> create table person (
2 first_name varchar2(10),
3 last_name varchar2(10)
4 );
Table created.
SQL> ALTER TABLE person ADD CONSTRAINT person_name_unique
2 UNIQUE(LOWER(first_name),LOWER(last_name));
UNIQUE(LOWER(first_name),LOWER(last_name))
*
ERROR at line 2:
ORA-00904: : invalid identifier
但是,基于函数的唯一索引可以正常工作
SQL> create unique index idx_uniq_name
2 on person( lower(first_name), lower(last_name) );
Index created.
答案 1 :(得分:0)