Oracle SQL语句 -- 第十四章 约束

--14.1、NOT NULL:非空约束 
--例如:姓名不能为空 
CREATE TABLE person 
( 
 pid NUMBER , 
 name VARCHAR(30) NOT NULL 
) ; 

-- 插入数据 
INSERT INTO person(pid,name) VALUES (11,'张三'); 
-- 错误的数据,会受到约束限制,无法插入

--14.2、 PRIMARY KEY:主键约束 
-- · 不能重复,不能为空 
-- · 例如:身份证号不能为空。 
 现在假设pid字段不能为空,且不能重复。 
DROP TABLE person ; 
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,'李四');

--14.3、UNIQUE:唯一约束,值不能重复(空值除外) 人员中有电话号码,电话号码不能重复。 
DROP TABLE person ; 
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');

-- 14.4、CHECK:条件约束,插入的数据必须满足某些条件 
 例如:人员有年龄,年龄的取值只能是0~150岁之间 
DROP TABLE person ; 
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); 

--14.5、Foreign Key:外键 
CREATE TABLE book 
( 
 bid NUMBER PRIMARY KEY NOT NULL , 
 name VARCHAR(50) , 
 -- 书应该属于一个人 
 pid NUMBER  
) ; 

DROP TABLE book ; 
CREATE TABLE book 
( 
 bid NUMBER PRIMARY KEY NOT NULL , 
 name VARCHAR(50) , 
 -- 书应该属于一个人 
 pid NUMBER 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,'JAVA',12) ; 

--14.6、级联删除 
--在建立外键的时候必须指定级联删除(ON  DELETE  CASCADE)。 
CREATE TABLE book 
( 
 bid NUMBER PRIMARY KEY NOT NULL , 
 name VARCHAR(50) , 
 -- 书应该属于一个人 
 pid NUMBER , 
 -- 建立约束:book_pid_fk,与person中的pid为主-外键关系 
 CONSTRAINT book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE 
) ; 
 
 
DROP TABLE book ; 
DROP TABLE person ; 
CREATE TABLE person 
( 
 pid NUMBER , 
 name VARCHAR(30) NOT NULL , 
 tel VARCHAR(50) , 
 age NUMBER  
) ; 
CREATE TABLE book 
( 
 bid NUMBER    , 
 name VARCHAR(50) , 
 pid NUMBER  
) ;

--以上两张表中没有任何约束,下面使用  alter命令为表添加约束 
-- 1、 为两个表添加主键: 
  · person表pid为主键: 
   ALTER TABLE person ADD CONSTRAINT person_pid_pk PRIMARY KEY(pid) ; 
  · book表bid为主键: 
   ALTER TABLE book ADD CONSTRAINT book_bid_pk PRIMARY KEY(bid) ; 
--2、 为person表中的tel 添加唯一约束: 
  ALTER TABLE person ADD CONSTRAINT person_tel_uk UNIQUE(tel) ; 
-- 3、 为person表中的age添加检查约束: 
  ALTER TABLE person ADD CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 150) ; 
-- 4、 为book表中的pid添加与person的主-外键约束,要求带级联删除 
  ALTER  TABLE  book  ADD  CONSTRAINT  person_book_pid_fk  FOREIGN  KEY  (pid) 
REFERENCES person(pid) ON DELETE CASCADE ;

--14.7、删除约束: 
 ALTER TABLE book DROP CONSTRAINT person_book_pid_fk ; 
alter table student drop unique(tel); 

--14.8、 启用约束 
ALTER TABLE book enable CONSTRAINT person_book_pid_fk ; 

--14.9、 禁用约束 
ALTER TABLE book disable CONSTRAINT person_book_pid_fk ; 

 

posted @ 2016-04-07 15:16  FH1004322  阅读(382)  评论(0)    收藏  举报