oracle中的主键、外键、唯一约束、外键约束、约束、索引等这些概念很模糊,大家能给我讲讲吗,还有他们都是什么关系?

解决方案 »

  1.   

    1、查找表的所有索引(包括索引名,类型,构成列):select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表2、查找表的主键(包括名称,构成列):select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表3、查找表的唯一性约束(包括名称,构成列):select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表查询外键约束的列名:select * from user_cons_columns cl where cl.constraint_name = 外键名称查询引用表的键的列名:select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名5、查询表的所有列及其属性select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查询的表本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xx_liuhui/archive/2009/07/08/4330378.aspx
      

  2.   

    主键:
    关系数据库依赖于主键—它是数据库物理模式的基石。主键在物理层面上只有两个用途:
    1. 惟一地标识一行。
    2. 作为一个可以被外键有效引用的对象。
    外键:
    外键是设置当前表中的某一列与别一数据表中的主键列关联。主要目的是控制与外键表中的数据,保持数据一致性,完整性,也就是说:当前表中这一列的数据必须是关联外键列中的某一数据,而且相关联的两个数据列的类型必须相同;当关联外键列某一数据修改或删除时,将触当前表的某一项相应操作。可解发以下事件以及参数:
    触发事件:on delete和on update
    可设参数:cascade(跟随外键改动);
    restrict(限制外表中的外键改动);
    set Null(设空值);
    set Default(设默认值);
    no action [默认]    设置关联的语句由[指定主键关键字:foreign key(列名)]和[引用外键关键字: references <外键表名>(外键列名)]组成。例如创建一个关于books的购物车数据表“gbooks”,其中“gbookid”与books表中的“bookid”创建外键关联。
    唯一约束:
    唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的。
    外键约束:
    键既能确保数据完整性,也能表现表之间的关系。如果添加外键到一个表,就在您定义外键的表(引用表)和外键引用的表(被引用表)之间创建依赖关系。添加外键之后,插入引用表的记录要么必须与被引用表中被引用列的某条记录匹配,要么外键列的值必须设置为NULL。
    约束:
    约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。包括在建表的同时创建,建表后创建,可定义列级或表级约束,可通过数据字典表查看约束。
    索引:相当于书本的目录,加快数据的查找。
      

  3.   

    1、查找表的所有索引(包括索引名,类型,构成列):select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表2、查找表的主键(包括名称,构成列):select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表3、查找表的唯一性约束(包括名称,构成列):select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表查询外键约束的列名:select * from user_cons_columns cl where cl.constraint_name = 外键名称查询引用表的键的列名:select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名5、查询表的所有列及其属性select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查询的表
      

  4.   

    约束是表、列级的强制规定、是防止那些无效或有问题的数据输入到表中。当对该表进行DML
    操作时,如果操作违反约束条件或规则,ORACLE就会拒绝执行,并给出提示。 约束放置在表中,以下五种约束:
    NOT NULL 非空约束 C     指定的列不允许为空值
    UNIQUE      唯一约束 U     指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的
    PRIMARY KEY     主键约束 P     唯一的标识出表的每一行,且不允许空值值,一个表只能有一个主键约束
    FOREIGN KEY     外键约束 R     一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列
    CHECK     条件约束 C     指定该列是否满足某个条件
    更详细参考:
    SQL基础 --> 约束(CONSTRAINT)
      

  5.   

    主键约束
    主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。主键约束同时也具有非空约束。
    示例1:定义匿名主键约束
    CREATE TABLE employee(
      empno NUMBER(10) PRIMARY KEY, 
      ename VARCHAR2(20) NOT NULL,
      sex CHAR(2),
      sal NUMBER(8,2),
      hiredate DATE DEFAULT sysdate,
      job VARCHAR2(10),
      email VARCHAR2(50),
      deptno NUMBER(3) NOT NULL);
    示例2:使用CONSTRAINT关键字为主键设置名称
    CREATE TABLE employee(
      empno NUMBER(10),
      ename VARCHAR2(20) NOT NULL,
      sex CHAR(2),
      sal NUMBER(8,2),
      hiredate DATE DEFAULT sysdate,
      job VARCHAR2(10),
      email VARCHAR2(50),
      deptno NUMBER(3) NOT NULL,
      CONSTRAINT emp_pk PRIMARY KEY(empno,ename));示例3:使用ALTER TABLE添加匿名主键约束
    SQL> ALTER TABLE employee
    ADD PRIMARY KEY(empno);示例4:使用ALTER TABLE添加指定名称的主键约束
    SQL> ALTER TABLE employee
    ADD CONSTRAINT emp_pk PRIMARY KEY(empno);示例5:删除主键约束
    SQL> ALTER TABLE employee
    DROP CONSTRAINT emp_pk;注意:添加主键约束前,如果主键列已经存在重复值或NULL值,则主键约束添加失败。 唯一性约束
    惟一性约束强调所在的列不允许有相同的值。但是,它的定义比主键约束弱,即它所在的列允许空值。UNIQUE约束的主要作用是在保证除主键列外、其他列值的惟一性。示例1:
    CREATE TABLE employee(
      empno NUMBER(10) PRIMARY KEY,
      ename VARCHAR2(20) NOT NULL,
      sex CHAR(2),
      sal NUMBER(8,2),
      hiredate DATE DEFAULT sysdate,
      job VARCHAR2(10),
      email VARCHAR2(50) CONSTRAINT emp_uk UNIQUE,
      deptno NUMBER(3) NOT NULL);注意:UNIQUE约束可以保证列中不存在重复值,但可以插入多个NULL值。可以同时添加NOT NULL约束。示例2:使用ALTER TABLE语句添加UNIQUE约束
    SQL> ALTER TABLE employee 
    ADD CONSTRAINT emp_uk UNIQUE(email);示例3:删除UNIQUE约束
    SQL> ALTER TABLE employee DROP CONSTRAINT emp_uk ; 外键约束
    外键FOREIGN KEY约束是几种约束是最复杂的,外键约束可以使两个表进行关联。外键是指引用另一个表中的某个列或某几个列,或者本表中另一个列或另几个列的列。被引用的列应该具有主键约束,或者惟一性约束。
     
    添加FOREIGN KEY约束语法形式如下:
    column_name1 data_type [ CONSTRAINT constraint_name ] 
    REFERENCES table_name (column_name2)1.添加外键约束
    示例:
    SQL> CREATE TABLE student(
            sid NUMBER(10) PRIMARY KEY,   
            sname VARCHAR2(8),   
            sex CHAR(2),   
    classid NUMBER(3) )
    SQL> CREATE TABLE class(
    cid NUMBER(3)PRIMARY KEY,
    cname VARCHAR2(20),
    tel VARCHAR2(20))
    SQL> ALTER TABLE student
    ADD CONSTRAINT stu_class FOREIGN KEY(classid)
    REFERENCES class(cid); 
      

  6.   

    主键约束
    主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。主键约束同时也具有非空约束。
    示例1:定义匿名主键约束
    CREATE TABLE employee(
      empno NUMBER(10) PRIMARY KEY, 
      ename VARCHAR2(20) NOT NULL,
      sex CHAR(2),
      sal NUMBER(8,2),
      hiredate DATE DEFAULT sysdate,
      job VARCHAR2(10),
      email VARCHAR2(50),
      deptno NUMBER(3) NOT NULL);
    示例2:使用CONSTRAINT关键字为主键设置名称
    CREATE TABLE employee(
      empno NUMBER(10),
      ename VARCHAR2(20) NOT NULL,
      sex CHAR(2),
      sal NUMBER(8,2),
      hiredate DATE DEFAULT sysdate,
      job VARCHAR2(10),
      email VARCHAR2(50),
      deptno NUMBER(3) NOT NULL,
      CONSTRAINT emp_pk PRIMARY KEY(empno,ename));示例3:使用ALTER TABLE添加匿名主键约束
    SQL> ALTER TABLE employee
    ADD PRIMARY KEY(empno);示例4:使用ALTER TABLE添加指定名称的主键约束
    SQL> ALTER TABLE employee
    ADD CONSTRAINT emp_pk PRIMARY KEY(empno);示例5:删除主键约束
    SQL> ALTER TABLE employee
    DROP CONSTRAINT emp_pk;注意:添加主键约束前,如果主键列已经存在重复值或NULL值,则主键约束添加失败。 唯一性约束
    惟一性约束强调所在的列不允许有相同的值。但是,它的定义比主键约束弱,即它所在的列允许空值。UNIQUE约束的主要作用是在保证除主键列外、其他列值的惟一性。示例1:
    CREATE TABLE employee(
      empno NUMBER(10) PRIMARY KEY,
      ename VARCHAR2(20) NOT NULL,
      sex CHAR(2),
      sal NUMBER(8,2),
      hiredate DATE DEFAULT sysdate,
      job VARCHAR2(10),
      email VARCHAR2(50) CONSTRAINT emp_uk UNIQUE,
      deptno NUMBER(3) NOT NULL);注意:UNIQUE约束可以保证列中不存在重复值,但可以插入多个NULL值。可以同时添加NOT NULL约束。示例2:使用ALTER TABLE语句添加UNIQUE约束
    SQL> ALTER TABLE employee 
    ADD CONSTRAINT emp_uk UNIQUE(email);示例3:删除UNIQUE约束
    SQL> ALTER TABLE employee DROP CONSTRAINT emp_uk ; 外键约束
    外键FOREIGN KEY约束是几种约束是最复杂的,外键约束可以使两个表进行关联。外键是指引用另一个表中的某个列或某几个列,或者本表中另一个列或另几个列的列。被引用的列应该具有主键约束,或者惟一性约束。
     
    添加FOREIGN KEY约束语法形式如下:
    column_name1 data_type [ CONSTRAINT constraint_name ] 
    REFERENCES table_name (column_name2)1.添加外键约束
    示例:
    SQL> CREATE TABLE student(
            sid NUMBER(10) PRIMARY KEY,   
            sname VARCHAR2(8),   
            sex CHAR(2),   
    classid NUMBER(3) )
    SQL> CREATE TABLE class(
    cid NUMBER(3)PRIMARY KEY,
    cname VARCHAR2(20),
    tel VARCHAR2(20))
    SQL> ALTER TABLE student
    ADD CONSTRAINT stu_class FOREIGN KEY(classid)
    REFERENCES class(cid);