精华内容
下载资源
问答
  • oracle主键约束唯一键约束和唯一索引的区别 (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除; (2)主键约束要求列值非空,...

    oracle主键约束、唯一键约束和唯一索引的区别

    (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除;

    (2)主键约束要求列值非空,唯一键约束和唯一索引不要求列值非空

    (3)相同字段序列不允许重复创建索引

     

    --查看约束名称,约束类型
    select constraint_name, constraint_type from user_constraints;
    --查看索引名称,索引类型,唯一性,表空间名称
    select index_name, index_type, uniqueness, tablespace_name from user_indexes  where table_owner='SCOTT'  and table_name = 'TEST';
    --
    

     http://www.cnblogs.com/roucheng/p/weiyi.html

    posted @ 2017-06-22 08:49 酸奶加绿茶 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • 1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性...

    1.主键约束(PRIMARY KEY)

    1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 
    2) 是不可能(或很难)更新. 
    3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
    4) 主健可作外健,唯一索引不可;

    2.唯一性约束(UNIQUE)
    1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
    2) 只要唯一就可以更新. 
    3) 即表中任意两行在  指定列上都不允许有相同的值,允许空(NULL).
    4) 一个表上可以放置多个唯一性约束

    3.唯一索引(INDEX)

       创建唯一索引可以确保任何生成重复键值的尝试都会失败。

       唯一性约束和主键约束的区别:
        (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。
        (2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引

     

       约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
       唯一性约束与唯一索引有所不同:

       (1).创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。

       (2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。

       也就是说其实唯一约束是通过创建唯一索引来实现的。

       在删除时这两者也有一定的区别:

       删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,

       而删除了唯一索引的话就可以插入不唯一的值。 --------------------- 本文来自 蜗牛天堂 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/wushuang5566110/article/details/8069997?utm_source=copy

    展开全文
  • Oracle主键约束唯一键约束、唯一索引的区别 一般,我们看到术语“索引”“键”交换使用,但实际上这两个是不同的...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 SQL> select * from

    Oracle主键约束、唯一键约束、唯一索引的区别


    一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。

     

    接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。

    SQL> select * fromv$version;

     

    BANNER

    --------------------------------------------------------------------------------

    Oracle Database 11g EnterpriseEdition Release 11.2.0.1.0 - Production

    PL/SQL Release 11.2.0.1.0 -Production

    CORE   11.2.0.1.0     Production

    TNS for Linux: Version 11.2.0.1.0 -Production

    NLSRTL Version 11.2.0.1.0 -Production

     

    SQL> create tabletest (          

      2  id int,

      3  namevarchar2(20),

      4  constraintpk_testprimarykey(id))

      5  tablespaceusers;

     

    Table created.

     

    SQL> selectconstraint_name, constraint_type from user_constraints;

     

    CONSTRAINT_NAME               C

    -------------------------------

    PK_TEST                       P

     

    在test表中,我们指定了ID列作为主键,Oracle数据库会自动创建一个同名的唯一索引:

    SQL> selectindex_name, index_type, uniqueness, tablespace_name

      2  fromuser_indexes

      3  wheretable_owner='SCOTT'

      4  and table_name ='TEST';

     

    INDEX_NAME          INDEX_TYPE          UNIQUENES TABLESPACE_NAME

    ---------------------------------------- ---------------------------------------

    PK_TEST             NORMAL              UNIQUE   USERS

     

    此时,如果我们再试图在ID列上创建一个唯一索引,Oracle会报错,因为该列上已经存在一个唯一索引:

    SQL> create uniqueindex idx_test_uk on test(id);

    create unique index idx_test_uk ontest(id)

                                           *

    ERROR at line 1:

    ORA-01408: such column list alreadyindexed

    即使创建非唯一索引也不行:

    SQL> create indexidx_test_id on test(id);

    create index idx_test_id ontest(id)

                                    *

    ERROR at line 1:

    ORA-01408: such column list alreadyindexed

     

    那么唯一键约束的情况是怎样的呢?

    SQL> drop table testpurge;

     

    Table dropped.

     

    SQL> create tabletest(

      2  id int,

      3  namevarchar2(20),

      4  constraintuk_testunique(id));

     

    Table created.

     

    SQL> selectconstraint_name, constraint_type from user_constraints;

     

    CONSTRAINT_NAME               C

    -------------------------------

    UK_TEST                       U

     

    查看此时的索引情况:

    SQL> selectindex_name, index_type, uniqueness, tablespace_name

      2  fromuser_indexes

      3  wheretable_owner='SCOTT'

      4  and table_name ='TEST';

     

    INDEX_NAME          INDEX_TYPE          UNIQUENES TABLESPACE_NAME

    ---------------------------------------- ---------------------------------------

    UK_TEST             NORMAL              UNIQUE   USERS

    Oracle同样自动创建了一个同名的唯一索引,而且也不允许再在此列上创建唯一索引或非唯一索引。

     

    我们知道,主键约束要求列值非空(NOT NULL),那么唯一键约束是否也要求非空呢?

    SQL> insert intotest values(1, 'Sally');

     

    1 row created.

     

    SQL> insert intotest values(null, 'Tony');

     

    1 row created.

     

    SQL> insert intotest values(null, 'Jack');

     

    1 row created.

     

    SQL> select * fromtest;

     

           ID NAME

    ------------------------------

            1 Sally

              Tony

              Jack

    从实验结果来看,唯一键约束并没有非空要求。

     

    接下来我们看看唯一索引对列值的非空要求有什么不同。

    SQL> drop table testpurge;

     

    Table dropped.

     

    SQL> create tabletest(

      2  id int,

      3  namevarchar2(20));

     

    Table created.

     

    SQL> create uniqueindex idx_test_id on test (id);

     

    Index created.

     

    SQL> insert intotest values(1, 'Sally');

     

    1 row created.

     

    SQL> insert intotest values(null, 'Tony');

     

    1 row created.

     

    SQL> insert intotest values(null, 'Jack');

     

    1 row created.

     

    SQL> select * fromtest;

     

           ID NAME

    ------------------------------

            1 Sally

              Tony

              Jack

    通过实验,我们看出唯一索引与唯一键约束一样对列值非空不做要求。

     

    如果我们让主键约束或者唯一键约束失效,Oracle自动创建的唯一索引是否会受到影响?

    SQL> drop table testpurge;

     

    Table dropped.

     

    SQL> create tabletest(

      2  id int,

      3  namevarchar2(20),

      4  constraint uk_testunique(id));

     

    Table created.

     

    SQL> selectindex_name, index_type, uniqueness from user_indexes;

     

    INDEX_NAME                    INDEX_TYPE                 UNIQUENES

    --------------------------------------------------------- ---------

    UK_TEST                       NORMAL                     UNIQUE

     

    SQL> alter tabletest disable constraint uk_test;

     

    Table altered.

     

    SQL> selectindex_name, index_type, uniqueness from user_indexes;

     

    no rows selected

    当主键约束或者唯一键约束失效时,Oracle会删除隐式创建的唯一索引。

     

    如果我们先创建唯一索引,再创建主键或者唯一键约束,情况又会怎样呢?

    SQL> drop table testpurge;

     

    Table dropped.

     

    SQL> create tabletest(

      2  id int,

      3  namevarchar2(20));

     

    Table created.

     

    SQL> create uniqueindex idx_test_id on test (id);

     

    Index created.

     

    SQL> selectindex_name, index_type, uniqueness

      2  fromuser_indexes

      3  where table_owner ='SCOTT'

      4  and table_name ='TEST';

     

    INDEX_NAME                    INDEX_TYPE                 UNIQUENES

    --------------------------------------------------------- ---------

    IDX_TEST_ID                   NORMAL                     UNIQUE

     

    SQL> alter tabletest add constraint uk_test unique (id);

     

    Table altered.

     

    SQL> selectindex_name, index_type, uniqueness

      2  fromuser_indexes

      3  where table_owner ='SCOTT'

      4  and table_name ='TEST';

     

    INDEX_NAME                    INDEX_TYPE                 UNIQUENES

    --------------------------------------------------------- ---------

    IDX_TEST_ID                   NORMAL                     UNIQUE

     

    SQL> selectconstraint_name, constraint_type

      2  fromuser_constraints

      3  where table_name ='TEST';

     

    CONSTRAINT_NAME               C

    -------------------------------

    UK_TEST                       U

     

    SQL> alter tabletest disable constraint uk_test;

     

    Table altered.

     

    SQL> selectconstraint_name, constraint_type, status

      2  fromuser_constraints

      3  where table_name ='TEST';

     

    CONSTRAINT_NAME               C STATUS

    ------------------------------ ---------

    UK_TEST                       U DISABLED

     

    SQL> selectindex_name, index_type, uniqueness, status

      2  fromuser_indexes

      3  where table_owner ='SCOTT'

      4  and table_name ='TEST';

     

    INDEX_NAME                    INDEX_TYPE                 UNIQUENES STATUS

    --------------------------------------------------------- --------- --------

    IDX_TEST_ID                   NORMAL                     UNIQUE   VALID

     

    实验结果表明,先创建的唯一索引不受约束失效的影响。

     

    总结如下:

    (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除;

    (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空;

    (3)相同字段序列不允许重复创建索引;

    展开全文
  • 唯一性约束和主键约束区别:  (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。  (2).在创建唯一性约束和主键约束时可以创建聚集索引非聚集...
    唯一性约束和主键约束的区别:
        (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。

        (2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引。

    约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。

    1.主键约束(PRIMARY KEY)

    1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 
    2) 是不可能(或很难)更新. 
    3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
    4) 主健可作外健,唯一索引不可;

    2.唯一性约束(UNIQUE)
    1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
    2) 只要唯一就可以更新. 
    3) 即表中任意两行在  指定列上都不允许有相同的值,允许空(NULL).
    4) 一个表上可以放置多个唯一性约束

    展开全文
  • 唯一约束和主键约束区别

    千次阅读 2017-10-18 23:42:00
    主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique (Name) 主键和唯一...
  • 主键唯一键约束、唯一索引区别之创建http://space.itpub.net/685769/viewspace-743314 主键唯一键约束、唯一索引区别之删除http://space.itpub.n...
  • 1.主键约束(PRIMARY KEY) 主键用于唯一地标识表中的每一条记录 ... 唯一性约束用来限制不受主键约束的列上的数据的唯一性, 即表中任意两行在 指定列上都不允许有相同的值。3.唯一索引(INDEX) 创建唯
  • 一般,我们看到术语“索引”“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 SQL> select * from v$version;   BANNER -----...
  • 主键(primary key):用户选作元组标识的一个候选程序主键 比如一个小范围的所有人,没有重名的,考虑以下属性 身份证 姓名 性别 年龄 身份证唯一,所以是一个超 姓名唯一,所以是一个超 (姓名,性别)唯一,...
  • 主键约束和唯一约束

    千次阅读 2019-03-07 21:30:59
    主键约束和唯一约束主键约束和唯一约束的区别普通索引和唯一索引Mysql中的索引普通索引(非唯一索引)唯一索引唯一索引主键约束的唯一索引唯一约束的唯一索引创建唯一索引删除主键约束和唯一约束自动创建的唯一索引 ...
  • 唯一约束和主键约束区别 1.主键约束(PRIMARY KEY)1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主。 2) 是不可能(或很难)更新. 3) 主键列上没有任何两行具有相同值(即重复值),不...
  • 一般,我们看到术语“索引”“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 SQL> select * from v$version;   BANNER ------...
  • 如题,是什么!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...
  • 一般,我们看到术语“索引”“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 SQL> select * from v$version;   BANNER ----------
  • 主键约束和唯一约束的区别

    千次阅读 2017-11-14 09:30:26
    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表
  • 一、非空约束(只能在列级设置,不能在表级设置) 1、在创建表时设置非空约束 CREATE TABLE table_name( column_name datatype NOT NULL,…… );     2、在修改表时添加非空约束 ALTER TABLE table_name ...
  • 创建、删除唯一约束: db2 "alter table tabname add unique(colname)" db2 "alter table tabname drop ...创建主键约束: db2 "alter table staff add primary key (id)" db2 "alter table t_da_jkda_rkxzl ...
  • 主键约束和唯一性约束的区别

    千次阅读 2014-08-08 18:01:13
    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表
  • mysql如何修改唯一性约束跟主键约束

    千次阅读 2017-09-20 12:32:34
    一、如何添加主键约束和唯一性约束1、添加主键约束 执行语法:alter table tableName add primarykey(column_name);#千万别忘了加(),同时要保证表结构中没有其他的主键,因为一个表中只能有一个主键。2、添加...
  • 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign key 1.1 非空约束:not null 1)在创建表时添加约束: CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空...
  • 目的:测试一下,1)如果一个表中已经创建了唯一索引,那么再在唯一索引上创建唯一键约束和主键约束,与直接创建主键约束唯一键约束区别2)如果一个表中已经创建了普通索引,那么再在普...
  • [url]http://blog.csdn.net/dlodj/article/details/7017331[/url] [url]http://blog.csdn.net/wushuang5566110/article/details/8069997[/url] [url]...
  • 唯一键约束 主键 主键:primary key 主要的键 一张表中只有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键 一张表只能最多一个主键 增加主键 SQL操作中有多种方式增加...
  • 首先说明一点,主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique (Name) 主键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,879
精华内容 15,951
关键字:

唯一键约束和主键约束的区别