完整约束二

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起的约束名就很好的找到问题所在

 

以上是关于完整约束二的主要内容,如果未能解决你的问题,请参考以下文章

数据库完整性 ch.5

五月十七日数据库基础知识点

关系完整性约束

数据引擎 创建表完整语法,字段类型,约束条件

OpenGL基础学习之二代码基本结构

为什么二代测序的原始数据中会出现Read重复现象?