Oracle表的约束

表的约束
定义:表的约束是 ORACLE 数据库中应用在表数据上的一系列强制性规则

 

按照约束用途分类:

  PRIMARY KEY:主键约束

  FOREIGN KEY:外键约束

  CHECK:检查约束

  UNIQUE:唯一约束

  NOT NULL:非空约束

 

创建约束:

--给已创建好的表添加约束
--
语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束内容;

 

约束的添加:

  约束可以在创建表的时候添加,也可以在表创建之后添加;

  在创建表时添加约束,系统会自动分配约束名称,在表创建之后添加约束,需要手动设置约束名称。

--约束也可以在创建表的时候添加
CREATE TABLE TEST_0916(
   SNO NUMBER PRIMARY KEY,
   SNAME VARCHAR2(100) UNIQUE,
   SBIRTHDAY DATE NOT NULL,
   SSEX VARCHAR2(10) CHECK(SSEX = '' OR SSEX = ''),
   CLASS VARCHAR2(10),
   SSAL NUMBER CHECK(SSAL >= 800 AND SSAL <= 5000)
);

 

主键约束:该字段非空,且唯一

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(字段名);

--给STUDENT表中的SNO字段添加主键约束
ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT PRIMARY KEY(SNO);

INSERT INTO STUDENT(SNO) VALUES('101');
INSERT INTO STUDENT(SNO) VALUES(NULL); --该条数据插入失败,主键不能为NULL
INSERT INTO STUDENT(SNO) VALUES('102');

 

删除约束

--语法结构:ALTER TABLE 表名 DROP CONSTRAINT 约束名;
ALTER TABLE STUDENT DROP CONSTRAINT PK_STUDENT;

 

复合主键/联合主键:由多个字段一起组合的主键

--创建复合主键、联合主键
ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT PRIMARY KEY(SNO,SNAME);

INSERT INTO STUDENT(SNO,SNAME) VALUES('101',NULL); --插入失败,主键不能为NULL
INSERT INTO STUDENT(SNO,SNAME) VALUES('101','李军');
INSERT INTO STUDENT(SNO,SNAME) VALUES('101','张三');
INSERT INTO STUDENT(SNO,SNAME) VALUES('102','张三');

 

外键约束:必须建立在另外一张表的主键字段上

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(字段名) REFERENCES 从表名(字段名);

--给EMP_BAK的EMPNO字段添加外键约束,依赖于EMP表的EMPNO字段
ALTER TABLE EMP_BAK ADD CONSTRAINT FK_EMPNO FOREIGN KEY(EMPNO) REFERENCES EMP(EMPNO);

 

非空约束:类似于主键约束,主键约束是非空且唯一,非空约束可以不唯一(允许重复),但是不能为null

--语法结构:ALTER TABLE 表名 MODIFY 字段名 NOT NULL;

--给STUDENT表的SSEX字段添加非空约束
ALTER TABLE STUDENT MODIFY SSEX NOT NULL;

INSERT INTO STUDENT (SNO, SNAME, SSEX) VALUES('101','张三','');

 

检查约束

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(筛选条件);
--给STUDENT表的SSEX字段添加检查约束,只允许插入'男'或者'女'
ALTER TABLE STUDENT ADD CONSTRAINT CHK_SSEX CHECK(SSEX = '' OR SSEX = '');

--添加检查约束的字段,插入只能插约束内的筛选条件,或者不插入(NULL)
INSERT INTO STUDENT (SNO, SNAME, SSEX) VALUES('102','张三',NULL);

 

唯一约束

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(字段名);
--给STUDENT表中的SBIRTHDAY字段添加唯一约束
ALTER TABLE STUDENT ADD CONSTRAINT UNQ_STUDENT UNIQUE(SBIRTHDAY);

 

总结:

(1) 一张表只有一个主键,主键非空且唯一;
(2)外键只能依赖于另一张表的主键, 且两者的数据类型必须一致;
(3)约束不能修改,只能删除重建;
(4)约束也可以在创建表的时候添加。

posted @ 2020-10-13 11:00  小碗吃不胖的  阅读(374)  评论(0编辑  收藏  举报