18.表-约束

约束(CONSTRAINT)

  • 全称是约束条件,也称作完整性约束条件

  • 约束是在数据表上强行执行的一些数据校验规则,如果存在违反规则的数据行为,行为会被约束终止

  • 约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)

  • 添加约束的完整语法:字段 CONSTRAINT 约束名 约束类型

    • 也可以使用简写:字段 约束类型

    • 完整语法因为有约束名,管理起来很方便,如果使用简写,数据库会自动生成一个名字,存入约束相关的数据字典中

  • 约束类型有:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、DEFAULT

  • 如果约束是在建表后添加,那么若表中已有数据不满足要设置约束条件,则无法添加

NOT NULL(非空约束)

  • 简称NN,指示某列不能存储 NULL 值

  • NOT NULL 约束强制列不接受 NULL 值

  • NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录

使用 NOT NULL

  • 创建表时添加该约束:

    CREATE TABLE person(
    id NUMBER(4) NOT NULL,
    name VARCHAR(30) NOT NULL,
    gender CHAR(1) CONSTRAINT person_fn_nn NOT NULL,
    age NUMBER(10)
    );

  • 建表后添加该约束:

    ALTER TABLE person MODIFY(age NUMBER(10) NOT NULL);

  • 撤销该约束:

    ALTER TABLE person MODIFY(age NUMBER(10) NULL,gender CHAR(1) NULL);

    ALTER TABLE person DROP CONSTRAINT person_fn_nn;

UNIQUE(唯一性约束)

  • 简称UK,该约束用于保证单个字段或者多个字段的组合不出现重复值,但允许重复值是NULL值

使用 UNIQUE

  • 建表时添加:

    CREATE TABLE person(
    id NUMBER(4) UNIQUE,
    name VARCHAR(30) CONSTRAINT person_uk1 UNIQUE,
    gender CHAR(1),
    age NUMBER(10),
    height NUMBER(10),
    weight NUMBER(10),
    city VARCHAR(20),
    UNIQUE(gender),
    CONSTRAINT person_uk2 UNIQUE(age)
    );

  • 建表后添加:

    ALTER TABLE person ADD UNIQUE(height);

    ALTER TABLE person ADD CONSTRAINT person_uk3 UNIQUE(city);

    ALTER TABLE person MODIFY(weigjt NUMBER(10) UNIQUE);

  • 撤销约束:

    ALTER TABLE person DROP CONSTRAINT person_uk;

PRIMARY KEY(主键约束)

  • 简称PK,是NOT NULL 和 UNIQUE 的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录

  • PRIMARY KEY约束唯一标识数据库表中的每条记录。

  • 主键列必须包含唯一的值,主键列不能包含NULL值。

  • 每个表都应该有一个主键,并且每个表只能有一个主键

使用 PRIMARY KEY

  • 建表时添加:

    CREATE TABLE person(
    id NUMBER(4) PRIMARY KEY,
    name VARCHAR(30),
    gender CHAR(1),
    age NUMBER(10)
    );

    CREATE TABLE person(
    id NUMBER(4),
    name VARCHAR(30),
    gender CHAR(1),
    age NUMBER(10),
    PRIMARY KEY(id)
    );

    CREATE TABLE person(
    id NUMBER(4),
    name VARCHAR(30),
    gender CHAR(1),
    age NUMBER(10),
    CONSTRAINT person_pk1 PRIMARY KEY(id)
    );

  • 建表后添加:

    ALTER TABLE person ADD PRIMARY KEY(id);

    ALTER TABLE person ADD CONSTRAINT person_pk1 PRIMARY KEY(id);

    ALTER TABLE person MODIFY(id NUMBER(4) PRIMARY KEY);

  • 撤销约束:

    ALTER TABLE person DROP PRIMARY KEY;

    ALTER TABLE person DROP CONSTRAINT person_uk1;

FOREIGN KEY(外键约束)

  • 简称FK,外键约束条件定义在两个表的字段或一个表的两个字段上,用于保证两个字段的关系

  • 外键约束对性能的降低:

    • 如果在一个频繁的DML操作的表上建立外键,每次DML操作,都将导致数据库自动对外键所关联的对应表做检查,很浪费资源

    • 外键确定了主从表的先后生成关系,有时会影响业务逻辑

  • 关联不一定需要外键约束

使用 FOREIGN KEY

  • 建表时添加:

    CREATE TABLE orders(
    o_id NUMBER(4 ),
    orderno NUMBER(4),
    pid NUMBER(4),
    FOREIGN KEY(pid) REFERENCES person(id)
    );

    CREATE TABLE orders(
    o_id int PRIMARY KEY,
    orderno int,
    pid int,
    CONSTRAINT person_fk FOREIGN KEY(pid)
    REFERENCES person(id)
    );

  • 修改表时添加:

    ALTER TABLE orders ADD FOREIGN KEY(pid) REFERENCES person(id);

    ALTER TABLE orders ADD CONSTRAINT person_fk1 FOREIGN KEY(pid)
    REFERENCES person(id);

  • 只能撤销有名字的外键约束:

    ALTER TABLE orders DROP CONSTRAINT person_fk;

CHECK(检查约束)

  • 简称CK,该约束用于强制要求在指定的字段上每个值都要满足CHECK中定义的条件

  • 当定义了CHECK约束的列新增或修改数据时,数据必须符合CHECK约束中定义的条件

  • 如CHECK约束不是紧跟在字段后面,那么它里面定义的条件可以包含多个字段

使用 CHECK

  • 建表时添加:

    CREATE TABLE person(
    id NUMBER(3) CHECK(id>0),
    name VARCHAR(10),
    age NUMBER(3) CHECK(age>0)
    );

    CREATE TABLE person(
    id NUMBER(3),
    name VARCHAR(10),
    age NUMBER(3) CONSTRAINT person_ck CHECK(age>0)
    );

    CREATE TABLE person(
    id NUMBER(3),
    name VARCHAR(10),
    age NUMBER(3),
    CHECK(id>0 AND age>0)
    );

    CREATE TABLE person(
    id NUMBER(3),
    name VARCHAR(10),
    age NUMBER(3),
    CONSTRAINT person_ck CHECK(age>0 AND id>0)
    );

  • 建表后添加:

    ALTER TABLE person ADD CHECK(age>0 AND id>0);

    ALTER TABLE person ADD CONSTRAINT person_ck CHECK(id>0 AND age>0);

  • 删除检查约束:

    ALTER TABLE person DROP CONSTRAINT person_ck;

DEFALUT(默认值)

  • 简称DF,用于向列中插入默认值

  • 如果没有规定其他的值,那么会将默认值添加到所有的新记录

使用默认值

  • 建表时:

    CREATE TABLE person(
    id NUMBER(4),
    name VARCHAR(30),
    gender CHAR(1) DEFALUT ‘F’,
    age NUMBER(10) DEFAULT 0
    );

  • 建表后:

    ALTER TABLE person MODIFY(id DEFAULT 0);

  • 撤销约束:

    ALTER TABLE person MODIFY(gender DEFAULT NULL);

    • 该方法其实和真正意义上的撤销是有区别的,没有找到真正的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值