MySQL 学习笔记 基础(约束,多表查询 上)

约束

 

约束-概述

  • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  • 目的:保证数据库中数据的正确、有效性和完整性。
  • 分类:

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

例子:

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check ( age > 0 && age <= 120 ) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)  comment '用户表';

insert into user(name, age, status, gender) values ('Tom1', 19, '1', ''), ('Tom2', 25, '0', '');
insert into user(name, age, status, gender) values ('Tom3' , 19, '1', '');

insert into user(name, age, status, gender) values (null , 19, '1', '');
insert into user(name, age, status, gender) values ('Tom3', 19, '1', '');

insert into user(name, age, status, gender) values ('Tom4', 80, '1', '');
insert into user(name, age, status, gender) values ('Tom5', -1, '1', '');
insert into user(name, age, status, gender) values ('Tom5', 121, '1', '');

insert into user(name, age, gender) values ('Tom5', 120, '');

 

约束-外键约束

  • 概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

注意:目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。

  • 语法

    · 添加外键

CREATE TABLE 表名 (
   字段名 数据类型,
   ...
   [CONSTRANT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)   
);
ALTER TABLE 表名 ADD CONSTRANT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);

    · 删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
  • 删除/更新行为

ALTER TABLE 表名 ADD CONSTRANT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

 

多表查询

 

多表查询-多表关系介绍

  • 概述:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种关系,基本上分为三种:一对多(多对一),多对多,一对一。
  • 一对多(多对一)

    · 案例:部门与员工的关系

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

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

  •  多对多

    · 案例:学生与课程的关系

    · 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择

    · 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

  •  一对一

    · 案例:用户与用户详情的关系

    · 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率

    · 实现:在任意一方加入外键,关联另一方的主键,并且设置外键为唯一的(UNIQUE)

 

 

多表查询-概述

  • 概述:指从多张表中查询数据
  • 笛卡尔积:笛卡尔乘积是指在数学中,两个集合 A 集合和 B 集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)
  • 多表查询分类

    · 连接查询

      内连接:相当于查询 A、B交集部分数据

      外连接:

        左外连接:查询左表所有数据,以及两张表交集部分数据

        右外连接:查询右表所有数据,以及两张表交集部分数据

      自连接:当前表与自身的连接查询,自连接必须使用表别名。

    · 子查询

 

多表查询-连接查询-内连接

  • 隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ... ;
  • 显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ... ;

 

多表查询-连接查询-外连接

  • 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ... ;

相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据

  • 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ... ;

相当于查询表2(右表)的所有数据,包含表1和表2交集部分的数据

 

多表查询-连接查询-自连接

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

自连接查询,可以是内连接查询,也可以是外连接查询。

 

多表查询-连接查询-联合查询

对于 union 查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ... ;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

posted @ 2024-07-23 16:23  handsome_zyc  阅读(3)  评论(0编辑  收藏  举报