美文网首页
MySQL数据约束

MySQL数据约束

作者: Mon7ey | 来源:发表于2017-12-08 15:19 被阅读12次

    什么是数据约束

    数据按照特定的规则、限制存入数据库.这种对数据的限制和规则就是数据约束.

    约束类型

    默认值约束

    作用 :当用户没有对某字段插入数据时,使用默认值填充数据.

    关键字 :default

    注意 : 默认值字段允许为 null , 只有在不插入值时默认值才会起作用

    CREATE TABLE student(
        id INT,
        NAME VARCHAR(20),
        address VARCHAR(20) DEFAULT '河南郑州'    // default 后为默认值
        );
    

    非空约束

    作用 : 限制字段必须赋值

    关键字 : not null

    // 非空表
    create table student(
        id int,
        name varchar(20),
        gender varchar(2) not null);  -- 非空约束
    

    唯一约束

    作用 : 保证字段值只有唯一一个

    关键字 : unique

    注意 : 1) 位置字段可以插入null ,2) 唯一字段可以插入多个null

    create table student(
        id int unique,  -- 唯一约束
        name varchar(20));
    
        // 错误码: 1062
        Duplicate entry '1' for key 'id'
    

    主键约束

    关键字 : primary key

    作用 : 非空 + 唯一

    CREATE TABLE student(
        id INT PRIMARY KEY, -- 主键
        NAME VARCHAR(20),
        age INT);
    
        // 错误码: 1062
        Duplicate entry '1' for key 'PRIMARY'
    
        //  插入null值 : Field 'id' doesn't have a default value
        insert into student(name) values('李四');
    
    联合主键

    自增长约束

    关键字 : auto_increment
    关键字2 : zerofill 零填充

    作用 : 自增长字段可以不复制,该字段会自动递增

    CREATE TABLE student(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20),
        age INT);
    
    // 零填充
    CREATE TABLE student(
        id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20),
        age INT);
    

    外键约束

    关键字 :
    CONSTRAINT : 英文含义为"约束".是外键约束的关键字
    emloyee_dept_fk : 外键约束的名字,从表明在前,主表名在后
    FOREIGN KEY(deptId) : 外键的关键字.规定从表中那个字段是外键字段
    REFERENCES dept(id) : reference 是关键字,该关键字后跟的是主表名(参考字段).

    作用 :约束两张表的数据

    注意 :

    1. 被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!
    2. 主表的参考字段通用为主键.
    3. 添加数据: 先添加主表,再添加副表
    4. 修改数据: 先修改副表,再修改主表
    5. 删除数据: 先删除副表,再删除主表
    // 主表(部门表)
    CREATE TABLE dept(
        id INT PRIMARY KEY,
        deptName VARCHAR(20));
    
    -- 从表(员工表)
    CREATE TABLE employee(
        id INT PRIMARY KEY,
        empName VARCHAR(20),
        deptId INT,
        -- 申请一个外键约束
        CONSTRAINT emloyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
        );
    

    级联操作

    问题: 当有了外键约束的时候,必须先修改或删除副表中的所有关联数据,才能修改或删除主表!但是,我们希望直接修改或删除主表数据,从而影响副表数据。可以使用级联操作实现!!!

    级联修改: ON UPDATE CASCADE
    级联删除: ON DELETE CASCADE
    
    CREATE TABLE employee(
    id INT PRIMARY KEY,
    empName VARCHAR(20),
    deptId INT,-- 把部门名称改为部门ID
    -- 声明一个外键约束
    CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE  -- ON CASCADE UPDATE :级联修改
    --           外键名称                  外键               参考表(参考字段)
    

    )
    注意: 级联操作必须在外键基础上使用

    相关文章

      网友评论

          本文标题:MySQL数据约束

          本文链接:https://www.haomeiwen.com/subject/onbcixtx.html