MySQL笔记-约束


1 数据库表的约束

1.1 约束种类

约束名 关键字
主键 primary key
唯一 unique
非空 not null
外键 foreign key

1.2 主键

  1. 主键的性质

    • 关键字: primary key
    • 特点:
      1. 非空
      2. 唯一
  2. 主键的创建
    2.1 创建表时添加主键
    字段名 字段类型 PRIMARY KEY
    2.2 在已有的表中添加主键
    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

    • 例:
    --创建表t1
    create table t1(
    	id int primary key,
    	name varchar(20),
    	age int
    );
    desc t1;
    
    -- 插入值(此时id的值不能为null)
    inset into t1 values(1,'张三',20);
    
    --删除主键
    alter table t1 drop primary key;
    
    --添加主键
    alter table t1 add int primary key(id);
    

    2.3 主键自增长
    AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

    • 语法:
    -- 创建表时创建
    CREATE TABLE 表名(
    	列名 int primary key AUTO_INCREMENT
    ) [AUTO_INCREMENT=起始值];
    
    -- 创建好后修改
    alter table 表名 AUTO_INCREMENT=起始值;
    

1.3 唯一约束

表中某一列不能出现重复的值

  • 格式:
    字段名 字段类型 UNIQUE;
    • null值没有数据,不存在重复的问题

1.4 非空约束

某一列值不能为null

  • 格式:
    字段名 字段类型 NOT NULL;

1.5 外键约束

  1. 概念
    • 主表:一方,用来约束其他表的表
    • 从表/副表:多方,使用主表的数据,被别人约束的表
    • 外键: 在从表中与主表主键对应的那一列
  2. 语法
  • 创建
    [CONSTRAINT][外键约束名称] foreign key(外键字段名) references 主表名(主键字段名);

  • 修改
    ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);

  • 删除
    ALTER TABLE 从表 drop foreign key 外键名称;

  • 级联操作

在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

级联操作语法 说明
ON UPDATE CASCADE 级联更新,只能是创建表的时候创建级联关系。
更新主表中的主键,从表中的外键列也自动同步更新
ON DELETE CASCADE 级联删除
  • 例:
    -- 创建主表
    create table department(
    	id int PRIMARY key auto_increment,
    	dep_name VARCHAR(128),
    	dep_location VARCHAR(128)
    );
    insert into department
    values(null, '研发部','广州'),(null, '销售部', '深圳');
    
    --创建从表并添加外键约束
    create table employee(
    id int primary key auto_increment,
    name varchar(20),
    age int,
    dep_id int, -- 外键对应主表的主键
    -- 创建外键约束并添加级联操作
    constraint emp_depid_fk foreign key (dep_id) references department(id) on update cascade on delete cascade
    );
    -- 插入数据
    INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
    

参考网课资料