完整约束二
Posted soprano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完整约束二相关的知识,希望对你有一定的参考价值。
约束分以下几种:
- 非空约束:如果使用了非空约束,则以后些字段的内容不允许设置为NULL (NOT NULL)
- 唯一约束:即此列的内容不允许出重复UK
- 主键约束:表示一个唯一的标识,例如:人员ID不能重复,且不能为空PK
- 检查约束:用户自行编写设置内容的检查条件;CK
- 主外键约束:在2张表上进行的关联的约束,加入关联约束之后就产生了父子关系
非空约束NK:
示例一、创建member表,其中姓名不允许为空
创建表 CREATE TABLE MEMBER( mid NUMBER, NAME VARCHAR2(30) NOT NULL ); 非空只需要在定义的字段后写 NOT NULL 查看表结构 DESC member;
此时向表中添加数据
错误写法: INSERT INTO MEMBER(mid,NAME) VALUES(1);, 会提示没有足够的值
错误的写法二 INSERT INTO MEMBER(mid,NAME) VALUES(1,NULL); 无法将NULL值插入member.name字段
看提示信息:由tests用户名,member表名,name字段名组成
非空约束:会提示完整的信息
因name字段在设置了NOT NULL非空约束就不能不写,或者写NULL都是错误
正确的写法:
INSERT INTO MEMBER(mid,NAME) VALUES(1,‘刘楠‘);
唯一约束 UK:
唯一约束—在字段后加上UNIQUE
创建表 CREATE TABLE MEMBER( mid NUMBER, NAME VARCHAR2(30) NOT NULL, email VARCHAR2(50) UNIQUE ); --添加数据 --正确 INSERT INTO MEMBER(mid,NAME,Email) VALUES(1,‘刘楠‘,‘[email protected]‘); 可以添加成功
示例二、添加错误的信息
下面添加错误数据—email和上面一样 INSERT INTO MEMBER(mid,NAME,Email) VALUES(2,‘张三‘,‘[email protected]‘);
由于email设置了唯一约束,所以会报错
提示违反唯一约束条件
但提示信息完全看不明白,因为没有给约束起别名
使用CONSTRAINT来定义约束,定义
正确的唯一约束写法
--先删除 DROP TABLE MEMBER PURGE; --创建表 CREATE TABLE MEMBER( mid NUMBER, NAME VARCHAR2(30) NOT NULL, email VARCHAR2(50) , CONSTRAINT uk_email UNIQUE(email) );
为唯一约束起别名UK_EMAIL
也可以用以下方法添加
推荐创建表时添加, 尽量不使用ALTER ALTER TABLE 表名 ADD CONSTRAINT UK_email UNIQUE(email)
添加正确数据
NSERT INTO MEMBER(mid,NAME,Email) VALUES(1,‘刘楠‘,‘[email protected]‘); --可以添加成功
添加错误数据
添加错误数据—email和上面一样 INSERT INTO MEMBER(mid,NAME,Email) VALUES(2,‘张三‘,‘[email protected]‘);
提示违反唯一约束条件
提示信息会有tests用户名,UK_EMAIL约束名
信息比较完整
唯一约束可以为NULL,NULL不受唯一约束的影响
INSERT INTO MEMBER(mid,NAME,Email) VALUES(2,‘张三‘,null); INSERT INTO MEMBER(mid,NAME,Email) VALUES(3,‘李四‘,null); --查询 SELECT * FROM MEMBER;
主键约束PK:
PRIMARY KEY(PK)
--创建表—添加主键约束只要在字段后加上PRIMARY KEY就可以
CREATE TABLE MEMBER ( mid NUMBER PRIMARY KEY, NAME VARCHAR2(20) NOT NULL, email VARCHAR2(30), CONSTRAINT uk_mail UNIQUE(email) ); --正确 INSERT INTO MEMBER(mid,NAME,Email) VALUES(1,‘刘楠‘,‘[email protected]‘);
添加错误信息:
INSERT INTO MEMBER(mid,NAME,Email) VALUES(1,‘刘楠‘,‘[email protected]‘); 此时会提示
但提示信息不完整,
一般用CONSTRAINT 添加约束名
CONSTRAINT PK_MID PRIMARY KEY(mid)
--先删除 DROP TABLE MEMBER PURGE; --创建表 CREATE TABLE MEMBER( mid NUMBER, NAME VARCHAR2(30) NOT NULL, email VARCHAR2(50), --添加唯一约束指定约束名 CONSTRAINT uk_email UNIQUE(email), --添加主键约束指定约束名 CONSTRAINT pk_mid PRIMARY KEY(mid) );
--正确 INSERT INTO MEMBER(mid,NAME,Email) VALUES(1,‘刘楠‘,‘[email protected]‘); --错误 INSERT INTO MEMBER(mid,NAME,Email) VALUES(1,‘刘楠‘,‘[email protected]‘); 此时会提示
提示信息就会提示tests用户名,PK_MID约束名
添加约束时尽量都使用CONSTRAINT 来添加约束名,有错误时才容易找到原因
检查约束CK:
CHECK 简称CK
只需要在字段后加上就好
如年龄字段设置 CHECK(age BETWEEN 0 AND 200), 最好用CONSTRAINT来添加约束名
最好用CONSTRAINT来添加约束名 CONSTRAINT CK_age CHECK(age BETWEEN 0 AND 200); 性别 CONSTRAINT CK_sex CHECK (sex IN (‘男’,’女’) )
--先删除 DROP TABLE MEMBER PURGE; --创建表 CREATE TABLE MEMBER ( mid NUMBER , NAME VARCHAR2(20) NOT NULL, email VARCHAR2(30), age number(3), sex VARCHAR2(10), --创建主键约束 CONSTRAINT PK_mid PRIMARY KEY(mid), --创建唯一约束 CONSTRAINT UK_email UNIQUE(email), --创建检查约束 CONSTRAINT CK_age CHECK(age BETWEEN 0 AND 200), --创建检查约束 CONSTRAINT CK_sex CHECK(sex IN (‘男‘,‘女‘)) ); --向表中添加正确数据 INSERT INTO MEMBER(mid,Name,Email,Age,Sex) VALUES(1,‘刘楠‘,‘[email protected]‘,30,‘男‘); 添加成功 select * from member; 查看成功
添加错误的数据年龄为300岁
INSERT INTO MEMBER(mid,Name,Email,Age,Sex) VALUES(2,‘张三丰‘,‘[email protected]‘,300,‘男‘);
有CONSTRAINT起的约束名就很好的找到问题所在
以上是关于完整约束二的主要内容,如果未能解决你的问题,请参考以下文章