Oracle_6 约束条件
2011-02-28 10:55
393 查看
约束就是指对插入数据的各种限制,例如:人员的姓名不能为空,人的年龄只能在0~100岁之间。约束可以对数据库中的数据进行保护。约束可以在建表的时候直接声明,也可以为已建好的表添加约束。
1. NOT NULL:非空约束
例如:学生表中学号不能为空
2. PRIMARY KEY:主键约束
主键约束的限制条件是:不能重复,不能为空
例如:一个人的***号不能重复也不能为空
3. UNIQUE:唯一约束,值不能重复(空值除外)
例如:人员中有电话号码,电话号码不能重复。
4.CHECK:条件约束,插入的数据必须满足某些条件
例如:人员有年龄,年龄的取值只能是0~100 岁之间
5.Foreign Key:外键
例如:有一种情况:一个人有很多本书:
Person 表
Book 表:而且book 中的每一条记录表示一本书的信息,一本书的信息属 于一个人
以上的代码没有任何错误,但是没有任何意义,因为一本书应该属于一个人, 所以在此处的pid 的取值应该与person 表中的pid 一致。 此时就需要外键的支持。修改book 的表结构。
6.级联删除
那么再分析:
如果假设一个人的人员信息没有了,那么此人所拥有的书还应该存在吗?最好,如果person 中的一条数据没了,则对应在book 中的数据也应该同时消失。
在之前的结构上执行delete 语句,删除person 表中的一条记录:
DELETE
FROM person WHERE pid=11;
提示不能删除的错误:因为book 中存在了此项的关联,如果person
表中的 一条数据删除了,则肯定会直接影响到book 表中数据的完整性,所以不让删除。如果非要删除,则应该先删除book 表中的对应数据,之后再删除person 表中的对应数据。此时如果想完成删除person 表的数据同时自动删除掉book 表的数据操作,则必须使用级联删除。
在建立外键的时候必须指定级联删除(ON DELETE CASCADE)。
7.删除约束:
注:sql语句中的注释应该是
文中只是为了便于区别使用编程语言的注释符号
本文出自《Oracle教程》感谢原作者Louis
1. NOT NULL:非空约束
例如:学生表中学号不能为空
CREATE TABLE student ( Pid NUMBER NOT NULL, Name VARCHAR(30) ); //插入数据: INSERT INTO student(pid,name) VALUES (11,'张三'); //插入错误的数据,会受到约束限制,不能插入 INSERT INTO student(name) VALUES (‘张三’);
2. PRIMARY KEY:主键约束
主键约束的限制条件是:不能重复,不能为空
例如:一个人的***号不能重复也不能为空
CREATE TABLE person ( Pid NUMBER PRIMARY KEY , Name VARCHAR(30) NOT NULL ) ; //插入数据 INSERT INTO person(pid,name) VALUES (11,'张三'); //主键重复了 INSERT INTO person(pid,name) VALUES (11,'李四');
3. UNIQUE:唯一约束,值不能重复(空值除外)
例如:人员中有电话号码,电话号码不能重复。
CREATE TABLE person ( Pid NUMBER PRIMARY KEY NOT NULL , Name VARCHAR(30) NOT NULL , Tel VARCHAR(50) UNIQUE ) ; //插入数据 INSERT INTO person(pid,name,tel) VALUES (11,'张三','1234567'); //电话重复了 INSERT INTO person(pid,name,tel) VALUES (12,'李四','1234567');
4.CHECK:条件约束,插入的数据必须满足某些条件
例如:人员有年龄,年龄的取值只能是0~100 岁之间
CREATE TABLE person ( Pid NUMBER PRIMARY KEY NOT NULL , Name VARCHAR(30) NOT NULL , Tel VARCHAR(50) NOT NULL UNIQUE , Age NUMBER CHECK(age BETWEEN 0 AND 150) ) ; //插入数据 INSERT INTO person(pid,name,tel,age) VALUES (11,'张三','1234567',30); //年龄的输入错误 INSERT INTO person(pid,name,tel,age) VALUES (12,'李四','2345678',-100);
5.Foreign Key:外键
例如:有一种情况:一个人有很多本书:
Person 表
Book 表:而且book 中的每一条记录表示一本书的信息,一本书的信息属 于一个人
CREATE TABLE book ( Bid NUMBER PRIMARY KEY NOT NULL , Name VARCHAR(50) , //书应该属于一个人 pid NUMBER ) ; //如果使用了以上的表直接创建,则插入下面的记录有效: INSERT INTO book(bid,name,pid) VALUES(1001,'J***A',12) ;
以上的代码没有任何错误,但是没有任何意义,因为一本书应该属于一个人, 所以在此处的pid 的取值应该与person 表中的pid 一致。 此时就需要外键的支持。修改book 的表结构。
CREATE TABLE book ( Bid NUMBER PRIMARY KEY NOT NULL , Name VARCHAR(50) , -- 书应该属于一个人 pidNUMBER REFERENCES person(pid) ON DELETE CASCADE -- 建立约束:book_pid_fk,与person 中的pid 为主-外键关系 --CONSTRAINT book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ) ; INSERT INTO book(bid,name,pid) VALUES(1001,'J***A',12) ;
6.级联删除
那么再分析:
如果假设一个人的人员信息没有了,那么此人所拥有的书还应该存在吗?最好,如果person 中的一条数据没了,则对应在book 中的数据也应该同时消失。
在之前的结构上执行delete 语句,删除person 表中的一条记录:
DELETE
FROM person WHERE pid=11;
提示不能删除的错误:因为book 中存在了此项的关联,如果person
表中的 一条数据删除了,则肯定会直接影响到book 表中数据的完整性,所以不让删除。如果非要删除,则应该先删除book 表中的对应数据,之后再删除person 表中的对应数据。此时如果想完成删除person 表的数据同时自动删除掉book 表的数据操作,则必须使用级联删除。
在建立外键的时候必须指定级联删除(ON DELETE CASCADE)。
CREATE TABLE book ( bidNUMBER PRIMARY KEY NOT NULL , nameVARCHAR(50) , -- 书应该属于一个人 pidNUMBER , -- 建立约束:book_pid_fk,与person 中的pid 为主-外键关系 CONSTRAINT book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE ) ;
7.删除约束:
ALTER TABLE book DROP CONSTRAINT person_book_pid_fk ; alter table student drop unique(tel);
注:sql语句中的注释应该是
--这是一条注释 create table student {........
文中只是为了便于区别使用编程语言的注释符号
本文出自《Oracle教程》感谢原作者Louis
相关文章推荐
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)
- oracle 删除表的约束条件
- Oracle_6 约束条件
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)自_baidu
- Oracle左连接中多个约束条件
- oracle 唯一约束条件 查询
- ORACLE:ORA-00001:违反唯一约束条件解决方法
- Oracle中出现“名称已被一现有约束条件占用”问题 怎么查找约束?怎么删除约束???
- oracle_约束条件(primary key、foreign key、unique、not null、check)
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)
- 【终结:Oracle用一次忘一次】 ORA-02290: 违反检查约束条件 (SXEQDB.SYS_C007265)
- oracle约束条件的添加
- Oracle 关于索引的一些命令学习,以及约束条件
- oracle主键自动增长的实现 Oracle Sequence oracle maxid自动生成--ORA-00001: 违反唯一约束条件 (NAME.SYS_C005547)产生的原因之一(select * from all_cons_columns w
- oracle imp遇到违反唯一约束条件 (GZW.SYS_C006112)
- oracle中插入数据出现错误:ORA-02291: 违反完整约束条件 (SCOTT.FK_SX9MLJB8T3FWB40GVCSKHYSYT)- 未找到父项关键字
- Oracle报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录
- 查询oracle中每个表有哪些约束条件
- oracle中插入数据出现错误:ORA-02291: 违反完整约束条件 (SCOTT.FK_SX9MLJB8T3FWB40GVCSKHYSYT)- 未找到父项关键字