• SQL约束


    约束

    1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

    2.目的:保证数据库中数据的正确、有效性和完整性。

    3.分类:

    约束描述关键字
    非空约束限制该字段的数据不能为nullNOT NULL
    唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
    主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
    默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
    检查约束(8.0.1版本后)保证字段值满足某一个条件CHECK
    外键约束用来让两张图的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

    注意:约束是作用于表中字段上的,可以再创建表/修改表的时候添加约束。

    常用约束

    约束条件关键字
    主键PRIMARY KEY
    自动增长AUTO_INCREMENT
    不为空NOT NULL
    唯一UNIQUE
    逻辑条件CHECK
    默认值DEFAULT

    例子:

    create table user(
        id int primary key auto_increment,
        name varchar(10) not null unique,
        age int check(age > 0 and age < 120),
        status char(1) default '1',
        gender char(1)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    外键约束

    • 概念

      外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

    添加外键:

    CREATE TABLE 表名(
        字段名 字段类型,
        ...
        [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
    );
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);
    -- 例子
    alter table emp add constraint fk_emp_dept_id foreign key(dept_id) references dept(id);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    删除外键:
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

    删除/更新行为
    行为说明
    NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新(与RESTRICT一致)
    RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新(与NO ACTION一致)
    CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录
    SET NULL当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许为null)
    SET DEFAULT父表有变更时,子表将外键设为一个默认值(Innodb不支持)

    更改删除/更新行为:
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE 行为 ON DELETE 行为;

    例子:

    insert into dept(id, name)
    VALUES (1, '科技部'),
           (2, '市场部'),
           (3, '财务部');
    
    alter table score
        add dept_id int;
        
    alter table score
        add constraint fk_score_dept_id foreign key (dept_id) references dept (id) on update cascade on delete cascade;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    C++ Qt开发:ComboBox下拉组合框组件
    【计算机网络】 TCP流量控制——滑动窗口和累积应答
    【微服务】微服务架构
    对汉诺塔n=4的情况进行解析
    【Pytorch】深度学习之优化器
    C++11 数据结构6 栈的链式存储,实现,测试
    开发从0 到1获取代码,提交,推送
    实现一个简单的短链服务
    linux grep操作汇总
    说透 Nacos 一致性协议
  • 原文地址:https://blog.csdn.net/Jerryqjr/article/details/132783047