约束分类:主键约束、唯一约束、检查约束、非空约束、外键约束
1.引用文档中的例子 简单说明下各个约束
CREATE TABLE person(
pid VARCHAR2(18),
name VARCHAR2(30) NOT NULL,
age NUMBER(3) CHECK(age BETWEEN 0 AND 150),
birthday DATE,
sex VARCHAR(2) DEFAULT 'M' ,
CONSTRAINT person_pid_pk PRIMARY KEY(pid),
CONSTRAINT person_name_uk UNIQUE(name),
CONSTRAINT person_sex_ck CHECK(sex IN('M','F'))
);
--name 的not null 为非空约束
--age 的 check(age BETWEEN 0 AND 150) 为检查约束
--sex 中的 default 'M' 是设置默认值为'M'
--constraint 添加约束
--person_pid_pk -primary key-主键约束
--person_name_uk - unique -唯一约束
--person_sex_ck -check 检查约束
2.创建一个主-外键约束
外键指定一个列(或一组列)的值必须符合另一个表的一些行的值
CREATE TABLE book(
bid NUMBER PRIMARY KEY,
bname VARCHAR(20),
bprice NUMBER(5,2),
pid VARCHAR2(18),
CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid));
--如果要删除person表,系统会报错
SQL 错误: ORA-02449: 表中的唯一/主键被外键引用
--可以采用强制性删除
DROP TABLE person CASCADE CONSTRAINT;(一般不用)
3.如果在person 和 book 表中添加记录,而在person表中进行删除一条记录时,假设该记录的pid被book表引用,那么会出现删除错误。如果希望一个表中的数据在删除时,能自动删除对应字表的记录,
可以使用级联删除的操作
CREATE TABLE book(
bid NUMBER PRIMARY KEY,
bname VARCHAR(20),
bprice NUMBER(5,2),
pid VARCHAR2(18),
CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE
);
4.在已有的表上添加约束
**ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段);**
SQL> ALTER TABLE person ADD CONSTRAINT person_pid_PK PRIMARY KEY(pid);
SQL> ALTER TABLE person ADD CONSTRAINT person_age_CK CHECK(age BETWEEN 0 AND 150);
SQL> ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE;
5.删除约束
ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;