varchar
我的表中有一列用于url值.我必须在不区分大小写的记录中使它独一无二.我找到了两种方法来实现它.
在该字段上创建唯一索引.
create unique index <index_name> on <tablename>(lower(<column_name>))
Run Code Online (Sandbox Code Playgroud)在字段上添加唯一约束
ALTER TABLE person ADD CONSTRAINT person_name_unique
UNIQUE(LOWER(first_name),LOWER(last_name));
Run Code Online (Sandbox Code Playgroud)从上述选择中采用的有效方法是什么?
Jus*_*ave 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
Run Code Online (Sandbox Code Playgroud)
但是,一个独特的基于函数的索引确实有效
SQL> create unique index idx_uniq_name
2 on person( lower(first_name), lower(last_name) );
Index created.
Run Code Online (Sandbox Code Playgroud)