Oracle之约束(这尼玛绝对着重点)
Oracle之约束(这尼玛绝对重点)
7.修改约束
关于约束类型的命名一定要统一:
会报错,想要增加主外键约束,则应该创建一个灭有约束的book表。
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'男' );
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 ;
容
- 1楼Wentasy昨天 19:31
- Perfect!