zoukankan      html  css  js  c++  java
  • 完整约束二(学习笔记)

    约束分以下几种:

    • 非空约束:如果使用了非空约束,则以后些字段的内容不允许设置为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,'刘楠','ln0491@163.com');
    可以添加成功

    示例二、添加错误的信息

    下面添加错误数据—email和上面一样
    INSERT INTO MEMBER(mid,NAME,Email)
    VALUES(2,'张三','ln0491@163.com');

    由于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,'刘楠','ln0491@163.com');
    --可以添加成功

    添加错误数据

    添加错误数据—email和上面一样
    INSERT INTO MEMBER(mid,NAME,Email)
    VALUES(2,'张三','ln0491@163.com');

    提示违反唯一约束条件

    提示信息会有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,'刘楠','ln0491@163.com');

    添加错误信息:

    INSERT INTO MEMBER(mid,NAME,Email)
    VALUES(1,'刘楠','ln0491@163.com');
    此时会提示

    但提示信息不完整,

    一般用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,'刘楠','ln0491@163.com');
    --错误
    INSERT INTO MEMBER(mid,NAME,Email)
    VALUES(1,'刘楠','ln0491@163.com');
    此时会提示

    提示信息就会提示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,'刘楠','153011784@qq.com',30,'');
    添加成功
    select * from member;
    查看成功

    添加错误的数据年龄为300岁

    INSERT INTO MEMBER(mid,Name,Email,Age,Sex)
    
    VALUES(2,'张三丰','ln0491@163.com',300,'');

    有CONSTRAINT起的约束名就很好的找到问题所在

     

     

     

  • 相关阅读:
    判断一个字符串是否为回文串
    读<大道至简>软件工程实践者的思想有感
    Java学习10.23(设置页面的编码方式1)
    Java学习10.25(javaweb在界面输出2)
    【搜索】C000_LG_奶酪(bfs)
    【并查集】B001_AW_自动程序分析(不要求顺序时的离散化)
    b_aw_信息传递 & 银河英雄传说(并查集暴力求环 / 记忆化 | 带权并查集)
    b_pat_团伙头目(并查集/dfs+字符串整形互相映射)
    【堆】C003_AW_接水问题(暴力 / 堆)
    【并查集】C002_AW_樱桃网 & 打击犯罪(最下生成树 / dfs / 并查集求连通块)
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4215331.html
Copyright © 2011-2022 走看看