Oracle之约束(这尼玛绝对重点)

1.约束的分类

  • 主键约束:主键表示是一个唯一的表示,本身不能为空
  • 唯一约束:在一个表中只允许建立一个主键约束,而其他列如果不希望出现重复值,则可以使用唯一约束
  • 检查约束:检查一个列的内容是否合法
|-例如:年龄,只能在0~150随机
|-例如:性别,只能是男、女、中性(表示草泥马的性别)
  • 非空约束:某字段的内容不能为空
  • 外键约束:在两张表中进行约束操作

2.主键约束(PRIMARY KEY)

主键约束一般都在id上使用,而且本身已经默认内容不能为空。主键约束可以再建立表的时候指定。

范例:建立person,在pid上增加主键约束

CREATE TABLE person(
	pid VARCHAR2(18) PRIMARY KEY,
	name VARCHAR(200),
	age NUMBER(3),
	birthday DATE,
	sex VARCHAR2(2) DEFAULT'男'
);


可以使用CONSTRAINT 为主键 指定一个约束的名字。

CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) ,
age NUMBER(3) ,
birthday DATE ,
sex VARCHAR2(2) DEFAULT ' ' ,
CONSTRAINT person_pid_pk PRIMARY KEY(pid)
) ;


3.非空约束(NOT NULL)

使用非空约束,表示一个字段的内容不允许为空,即:插入数据时候必须写入内容

DROP TABLE person ;
CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) NOT NULL ,
age NUMBER(3) NOT NULL ,
birthday DATE ,
sex VARCHAR2(2) DEFAULT ' ' ,
CONSTRAINT person_pid_pk PRIMARY KEY(pid)
) ;


4.唯一约束(UNIQUE)

表示一个字段的内容是唯一的,其他列不允许重复。

范例:姓名不允许出现重名的现象 范例
DROP TABLE person ;
CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) UNIQUE NOT NULL ,
age NUMBER(3) NOT NULL ,
birthday DATE ,
sex VARCHAR2(2) DEFAULT '男' ,
person_pid_pk PRIMARY KEY(pid)
) ;


也可以通过CONSTRAINT关键字进行命名:

 CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) NOT NULL ,
age NUMBER(3) NOT NULL ,
birthday DATE ,
sex VARCHAR2(2) DEFAULT '男' ,
CONSTRAINT person_pid_pk PRIMARY KEY(pid) ,
CONSTRAINT person_name_uk UNIQUE(name)
) ; 


5.检查约束(CHECK

使用检查约束来判断一个列中插入的内容是否合法,例如:年龄的取值,性别的取值范围。

CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) NOT NULL ,
age NUMBER(3) NOT NULL CHECK(age BETWEEN 0 AND 150),
birthday DATE ,
sex VARCHAR2(2) DEFAULT ' ' CHECK(sex IN ('男','女','中')),
CONSTRAINT person_pid_pk PRIMARY KEY(pid) ,
CONSTRAINT person_name_uk UNIQUE(name)
) ;


也可以通过CONSTRAINT关键字进行命名:

CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) NOT NULL ,
age NUMBER(3) NOT NULL,
birthday DATE ,
sex VARCHAR2(2) DEFAULT ' ',
CONSTRAINT person_pid_pk PRIMARY KEY(pid) ,
CONSTRAINT person_name_uk UNIQUE(name) ,
CONSTRAINT person_age_ck CHECK(age BETWEEN 0AND 150) ,
CONSTRAINT person_sex_ck CHECK(sex IN (' ',' ',' '))
) ;


6.主-外键约束(FOREIGN KEY)

DROP TABLE person ;
DROP TABLE book ;
CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) NOT NULL ,
age NUMBER(3) NOT NULL,
birthday DATE ,
sex VARCHAR2(2) DEFAULT '男',
CONSTRAINT person_pid_pk PRIMARY KEY(pid) ,
CONSTRAINT person_name_uk UNIQUE(name) ,
CONSTRAINT person_age_ck CHECK(age BETWEEN 0AND 150) ,
CONSTRAINT person_sex_ck CHECK(sex IN ('男','女','中'))
) ;
CREATE TABLE book
(
bid NUMBER PRIMARY KEY NOT NULL ,
bname VARCHAR(30) ,
bprice NUMBER(5,2) ,
pid VARCHAR2(18) ,
CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid)
) ;


如果,希望一个表中数据在删除时,可以自动删除对应的子表记录,则就可以使用级联删除的操作。

DROP TABLE book ;
DROP TABLE person ;
CREATE TABLE person
(
pid VARCHAR2(18) ,
name VARCHAR2(200) NOT NULL ,
age NUMBER(3) NOT NULL,
birthday DATE ,
sex VARCHAR2(2) DEFAULT '男',
CONSTRAINT person_pid_pk PRIMARY KEY(pid) ,
CONSTRAINT person_name_uk UNIQUE(name) ,
CONSTRAINT person_age_ck CHECK(age BETWEEN 0AND 150) ,
CONSTRAINT person_sex_ck CHECK(sex IN ('男','女','中'))
) ;
CREATE TABLE book
(
bid NUMBER PRIMARY KEY NOT NULL ,
bname VARCHAR(30) ,
bprice NUMBER(5,2) ,
pid VARCHAR2(18) ,
CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE
) ;

7.修改约束

语法如下:

ALTER TABLE tablename ADD CONSTRAINT 约束条件  约束类型(约束字段);

关于约束类型的命名一定要统一:

  • PRIMARY KEY :主键字段_PK
  • UNIQUE :字段_UK
  • CHECK : 字段_CK 
  • FOREIGN KEY : 父子段_子字段_FK
范例:
为person 表添加约束:
ALTER TABLE person ADD CONSTRAINT person_pid_PK PRIMARY KEY(pid) ;
ALTER TABLE person ADD CONSTRAINT person_name_UK UNIQUE(pid) ;
ALTER TABLE person ADD CONSTRAINT person_age_CK CHECK(age BETWEEN 0 AND 150) ;
ALTER TABLE person ADD CONSTRAINT person_sex_CK CHECK(sex IN ('男','女','中')) ;

会报错,想要增加主外键约束,则应该创建一个灭有约束的book表。
然后再增加主键外键约束:
ALTER TABLE book ADD CONSTRAINT book_bid_PK PRIMARY KEY(bid) ;
ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON
DELETE CASCADE ;












  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值