MySQL_约束、多表关系

约束

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

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

  3. 约束演示

    复制代码
    #定义一个学生表,表中要求如下:
    #sn 表示学生学号,要求使用 int 类型,主键并且自动递增;
    #name 表示姓名,不为空;
    #age 表示年龄,18-30岁之间;
    #gender 表示性别;
    #study_status 表示学习状态,0表示挂科,1表示通过,默认是 1
    ​
    CREATE TABLE student(
        sn int AUTO_INCREMENT  PRIMARY KEY,
        name varchar(10) not null,
        age int check(age >= 18 && age <=30),
        gender char(1),
        study_status TINYINT DEFAULT 1
    ​
    )COMMENT '学生表';
    ​
    SELECT * FROM student;
    ​
    #添加一点学生数据
    insert into student (name,age,gender,study_status) values('sy',18,'男',1);
    insert into student (name,age,gender,study_status) values('sy',18,'男',1);
    insert into student (name,age,gender,study_status) values(null,18,'男',1);
    insert into student (name,age,gender,study_status) values('sy',31,'男',1);
    insert into student (name,age,gender) values('werewr',30,'男');

外键约束

  1. 概念:用户建立两张表之间的联系的,为了保证数据的一致性和完整性的。

  2. 注意上面创建的时候没有使用外键真正的来管理数据,可能会存在数据的丢失

  3. 添加外键(主表就是数据不能随意改变的表)

    复制代码
    1.创建表创建外键
    CREATE TABLE 表名( 
        字段名 数据类型, ... 
        [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
     );
    ​
    2.添加外键
        ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;
    • 案例:为emp表的dept_id字段添加外键约束,关联department表的主键id

      复制代码
      alter table emp add constraint fk_emp_dept_id FOREIGN key (dept_id) REFERENCES department(id);
  4. 删除外键

    复制代码
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; 
    • 案例:删除刚才添加的外键

      复制代码
      ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id; 
  5. 删除更新外键

    • 添加了外键之后尼,再删除父表数据时产生约束行为,就称为删除和更新行为。

    • 语法

      复制代码
      ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
    • 案例:CASCADE(父表会删除或者更新子表中的外键数据)

      复制代码
      ALTER TABLE emp add constraint fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES department(id)
      on update cascade on delete cascade;
    • 案例:SET NULL

      复制代码
      ALTER TABLE emp add constraint fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES department(id)
      ON UPDATE SET NULL ON DELETE SET NULL;

一对一关系

  1. 用户和用户详情

  2. 关系:一对一的关系

  3. 用途:用于单表拆分,将一张表的基础字段放在一张表中,其它字段放在另一张表中,可以提升查询效率

  4. 实现:在任意一张表里面添加外键,关联另一张表的主键

    复制代码
    CREATE TABLE `user_detail` (
      `id` int NOT NULL AUTO_INCREMENT,
      `university` varchar(255) DEFAULT NULL,
      `car` varchar(255) DEFAULT NULL,
      `hourse` varchar(255) DEFAULT NULL,
      `user_id` int NOT NULL UNIQUE, // 唯一约束
      PRIMARY KEY (`id`) USING BTREE,
      KEY `u_id` (`user_id`),
      CONSTRAINT `u_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

一对多关系

  1. 案例:部门和员工关系

  2. 关系:一个部门对应多个员工,一个员工对应一个部门

  3. 实现:在多的一方建立外键,指向一的一方的主键

多对多的关系

  1. 案例:角色和菜单的关系,学生和老师

  2. 关系:一个学生可以有多个老师,一个老师可以有多个学生

  3. 实现:建立三方表,中间表来包含两个表的主键(需要创建中间表)

相关推荐
小白男神5 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G5 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
漂着的圆木5 天前
Agent 功能参与度:Copilot 怎么算
sql·数据分析·agent·githubcopilot·度量
kybs19915 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218615 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客5 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren5 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github