MySQL数据约束

2017-12-08  本文已影响12人  Mon7ey

什么是数据约束

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

约束类型

默认值约束

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

关键字 :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 :级联修改
--           外键名称                  外键               参考表(参考字段)

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

上一篇下一篇

猜你喜欢

热点阅读