zoukankan      html  css  js  c++  java
  • MySQL数据库笔记四:MySQL的约束

    <1>概念

    是一种限制,它是对表的行和列的数据做出约束,确保表中的数据的完整性和唯一性。

    <2>使用场景

    创建表的时候,添加约束

    <3>分类

    1. default:默认约束,域完整性
    2. not null:非空约束,域完整性
    3. unique:唯一约束,实体完整性
    4. primary key:主键约束,实体完整性
    5. foreign key:外键约束,参照完整性
    6. check:检查约束(MySQL不支持),域完整性
    7. atuo_increment:自增长约束
    8. unsigned:无符号约束
    9. zerofill:零填充约束
    数据库中有三个完整性:域、实体、参照完整性
    
    域(列)完整性:
        域完整性是对数据表中字段属性的约束。
    
    实体完整性在MySQL中实现:
        通过主键约束和候选键约束实现的
    
    参照完整性   
        也就是说是MySQL的外键

    1.default

    <1>概念
            指定某列的默认值,插入数据的时候,此列没有值,则用default指的的值来填充。
    
    <2>添加
            在创建表的时候添加   : create .....default
            create table t1(
                id int default 1,
                name varchar(20) default '老王'
            );
    
        通过alter语句添加:alter....modify/change.........
            alter table t1 modify id int default 2;
            alter table t1 change name name varchar(32) default '大拿';   
    
    <3>删除: alter.....modify/change
            alter table t1 modify id int;
            alter table t1 change name name varchar(32);

    2.not null

    <1>概念
        指定某列的值不为空,在插入数据的时候必须非空 "" 不等于 null ,0不等于 null
    
    <2>添加
        在创建表的时候添加   : create .....not null
            create table t1(
                id int not null,
                name varchar(20) not null
            );
    
        通过alter语句添加:alter....modify/change.........
            alter table t2 modify id int;
            alter table t2 change name name varchar(32) null;   
    
    <3>删除: alter.....modify/change

    3.unique

    <1>概念
        指定列或者列组合不能重复,保证数据的唯一性
        不能不限重复的值,但是可以有多个null
        同一张表可以有多个唯一的约束
    
    <2>添加唯一约束
        在创建表的时候添加   : create .....unique
            create table t3(
                id int unique,
                name varchar(32) not null
            );
    
            insert t3 value (1,'老王');
            insert t3 value (1,'老李'); -- id唯一约束,添加异常
    
            create table t3(
                id int,
                name varchar(32) not null,
                constraint id_unique unique(id,name)   --  添加复合约束
            );
    
        通过alter语句添加:alter....modify/change.........         /  alter .... add unique.....
            alter table t3 modify id int unique;
            alter table t3 add unique(name);
            alter table t3 add constraint un_id unique(id);
    
    <3>删除唯一约束:alter .... drop...index 名称            / drop index  名称 on 表名 
            alter table t3 drop index id_unique 
    
    <4>注意:如果删除的唯一约束列具有自增长约束,则必须要先删除自增长约束,再去删除唯一约束。

    4.主键约束

    <1>概念
        当前行的数据不为空并且不能重复
        相当于:唯一约束+非空约束
    
    <2>添加主键约束
        在创建表的时候添加   : create .....primary key
    
            create table t4(
                id int primary key,
                name varchar(20)
            );
    
        create table t4(
            id int,
            name varchar(32),
            [constraint id_unique] primary key (id,name)   --  联合约束
        );
    
        通过alter语句添加:alter....modify/change.........         /  alter .... add  primary key.....
            alter table t4 modify id int primary key;
            alter table t4 add constraint pk_id_name  primary key(id,name);
    
    <3>删除主键:alter ... drop primary key
            alter table t4 drop primary key
    
    <4>注意:如果删除的主键列具有自增长约束,则必须要先删除自增长约束,再去删除主键约束。

    5.auto_increment:自增长约束

    <1>概述
            列的数值自动增长,列的类型只能是整数类型
            通常给主键添加自增长约束。
    
    <2>添加
        在创建表的时候添加   : create .....auto_increment
        create table t5(
            id int auto_increment,
            name varchar(20)
        );
    
            通过alter语句添加:alter....modify/change.........     auto_increment
            alter table t5 change  id id int auto_increment;
    
    <3>删除:alter ... modify/change....
            alter table t5 modify  id int;
    
    <4>注意:
        一张表只能有一个自增长列,并且该列需要定义约束。

    6.unsigned:无符号约束

    <1>概念
        指定当列的数值未非负数
    
         age  tinyint 1   -128~127  UNSIGNED 0~255
    
    <2>添加
        在创建表的时候添加   : create .....UNSIGNED
        create table t5(
            id int,
            age tinyint UNSIGNED
        );
    
            通过alter语句添加:alter....modify/change.........     
            alter table t5 change  age age int tinyint UNSIGNED;
            alter table t5 modify age tinyint UNSIGNED;
    
    <3>删除:alter ... modify/change....
            alter table t5 modify age tinyint;
            alter table t5 change  age age int;

    7.zerofill:零填充约束

    <1>概述:
        指定当前列的数值的显示格式,不影响当前列显示范围
    
    <2>
        在创建表的时候添加   : create .....zerofill
    
        create table t6(
            id int,
            age tinyint zerofill
        );
    
    <3>删除:alter ... modify/change....
            alter table t5 modify age tinyint;
            alter table t5 change  age age int;

    8.外键约束

    通过建立外键,设置表于表之间的约束性,限制数据的录入
    
    员工表(从表)                         部门表(主表)
    员工号 员工姓名    部门名称                部门号    部门名称
    1       张三      1                   1           人力
    2       李四      2                   2           销售
    3       王五      3
    
    <1>概述
        建立表和表之间的关系,建立参照完整性。一个表可以有多个外键,每个外键必须参照另一个主键。
        被外键约束的列,取值必须参照其主表列中的值。
    
        注意:通常先创建主表,再创建从表
    
        create table dept(
            deptno int primary key auto_increment,
            dname varchar(32),
            loc varchar(32)
        );
    
        create table emp(
            empno int primary key auto_increment,
            ename varchar(32) not null,
            deptno int
        );
    
    
    <2>添加外键约束
        create table emp(
            empno int primary key auto_increment,
            ename varchar(32) not null,
            deptno int
            [constraint fk_name] foreign key (deptno) references dept(deptno);  -- 添加外键约束
        );
    
        使用alter add constraint....
            alter table emp add  constraint  fk_name foreign key (deptno)  references dept(deptno);
    
    <3>删除外键约束
            alter drop foreign key fk_name
    
            在创建表时,不去明确的指定外键约束的名称,系统辉自动的随机生成一个外键的名称,
            使用 show create table 表名。查看具体的外键名称。
    
        alter table emp drop foreign key fk_name;
    
    <4>设置外键中的级联关系
        1.on delete cascade:删除主表中的数据时,从表中的数据随之删除。
        2.on update cascade:更新主表中的数据时,从表中的数据随之删除。
        3.on delete set null:删除主表中的数据时,从表中的数据置空
    
    级联删除
        create table emp(
            empno int primary key auto_increment,
            ename varchar(32) not null,
            deptno int
            [constraint fk_name] foreign key (deptno) references dept(deptno) on delete cascade;    -- 添加外键约束   
        );
    
    注意:
        插入数据时,先插入主表的数据,在插入从表的数据。
        删除数据时候,先删除从表的数据,在删除主表中的数据。

    总结:数据库的约束

    主键约束、自增长约束、外键约束、唯一约束、非空约束、默认约束
  • 相关阅读:
    反序列化二叉树-队列
    二叉树中和为某一值的路径
    深拷贝复杂链表
    机器人运动范围
    vue 安装及使用
    json 函数
    js 获取当前时间
    JS编码方式
    搭建自己的Webpack项目
    webpack 安装 打包
  • 原文地址:https://www.cnblogs.com/sl0309/p/11160872.html
Copyright © 2011-2022 走看看