oracle数据库中唯一不区分大小写的约束

Awe*_*ome 9 oracle

varchar我的表中有一列用于url值.我必须在不区分大小写的记录中使它独一无二.我找到了两种方法来实现它.

  1. 在该字段上创建唯一索引.

    create unique index <index_name> on <tablename>(lower(<column_name>))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在字段上添加唯一约束

    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)