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

时间:2014-11-20 05:56:33

标签: oracle

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

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

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

    ALTER TABLE person ADD CONSTRAINT person_name_unique
    UNIQUE(LOWER(first_name),LOWER(last_name));
    
  3. 从上述选择中采用的有效方法是什么?

2 个答案:

答案 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)

  • 1是可能的,并给出重复的错误。
  • 2是不可能的。 (约束中无法使用功能)