oracle中的主键、外键、唯一约束、外键约束、约束、索引等这些概念很模糊,大家能给我讲讲吗,还有他们都是什么关系?
解决方案 »
- 使用JAVA调用存储过程,使用ParameterMetaData报错,请高手指点
- PLSQL如何调用另一个sql以及如何传递参数
- 帮忙检查一下SQL
- 使用DBCA创建数据库失败,提示ORA-01092:ORACLE例程终止。强制断开连接
- Oracle模糊查询求解
- 为何两段几乎完全相同的SQL,执行时间怎么会差这么多?
- ORACLE速度问题
- 多表更新,我想实现 update (select a.xx,b.xx from a,b) set a.xx=b.xx
- 我的ORACLE查询时不能显示汉字,该怎么办?
- 导入导出问题?
- oracle 在xp系统下的安装问题,请高手指导下!!!跪求!!!
- 关于SQL的查询,寻求解释
关系数据库依赖于主键—它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
外键:
外键是设置当前表中的某一列与别一数据表中的主键列关联。主要目的是控制与外键表中的数据,保持数据一致性,完整性,也就是说:当前表中这一列的数据必须是关联外键列中的某一数据,而且相关联的两个数据列的类型必须相同;当关联外键列某一数据修改或删除时,将触当前表的某一项相应操作。可解发以下事件以及参数:
触发事件:on delete和on update
可设参数:cascade(跟随外键改动);
restrict(限制外表中的外键改动);
set Null(设空值);
set Default(设默认值);
no action [默认] 设置关联的语句由[指定主键关键字:foreign key(列名)]和[引用外键关键字: references <外键表名>(外键列名)]组成。例如创建一个关于books的购物车数据表“gbooks”,其中“gbookid”与books表中的“bookid”创建外键关联。
唯一约束:
唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的。
外键约束:
键既能确保数据完整性,也能表现表之间的关系。如果添加外键到一个表,就在您定义外键的表(引用表)和外键引用的表(被引用表)之间创建依赖关系。添加外键之后,插入引用表的记录要么必须与被引用表中被引用列的某条记录匹配,要么外键列的值必须设置为NULL。
约束:
约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。包括在建表的同时创建,建表后创建,可定义列级或表级约束,可通过数据字典表查看约束。
索引:相当于书本的目录,加快数据的查找。
操作时,如果操作违反约束条件或规则,ORACLE就会拒绝执行,并给出提示。 约束放置在表中,以下五种约束:
NOT NULL 非空约束 C 指定的列不允许为空值
UNIQUE 唯一约束 U 指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的
PRIMARY KEY 主键约束 P 唯一的标识出表的每一行,且不允许空值值,一个表只能有一个主键约束
FOREIGN KEY 外键约束 R 一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列
CHECK 条件约束 C 指定该列是否满足某个条件
更详细参考:
SQL基础 --> 约束(CONSTRAINT)
主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。主键约束同时也具有非空约束。
示例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);
主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。主键约束同时也具有非空约束。
示例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);