MySQl day2-1

xixi,先把第二天内容发出来了,不过这是一大部分,还有一小部分努力晚上发出✊
第一天的内容,嗯....还在等待中

一、约束

(一)约束概念:

(1)约束时作用于表中列上的规则,用于限制加入表的数据

(2)约束的存在保证了数据库中数据的正确性、有效性和完整性

(二)约束分类:

          约束名称                                                                                    关键字

(1)非空约束(保证列中所有数据不能有null值)                          NOT NULL

(2)唯一约束(保重列中所有数据各不相同)                                 UNIQUE

(3)主键约束(主键是一行数据的唯一标识,要求非空且唯一)  PRIMARY KEY

(4)检查约束(保证列中的值满足某一条件)                                  CHECK

(5)默认约束(保存数据时,未指定值则采用默认值)                   DEFAULT

(6)外键约束(外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性)                                                                                                                       FOEREIGN KEY

1.为什么要有外键约束:

当表与表之间的数据有相关联性的时候,如果没有相关的数据约束,则无法保证数据的准确性!

2.外键约束的作用:

让表与表之间产生关联关系,从而保证数据的准确性

3.键的级联更新和级联删除:

a.什么是级联删除 当我想把主表中的数据进行删除时,我期望从表中有关联的数据也会随之删除!

b.级联操作: 默认:主表有关联数据,主表无法删除、修改关联字段。 set null : 主表操作时,从表置空。 no Action : 主表操作的时候,如果从表有关联数据,则主表操作失败。(默认) cascade : 主表操作的时候,从表级联操作。(慎用)

tips:MYSQL 不支持检查约束


二、多表操作

(一)多表介绍

(1)多表概念 多表就是多张数据表,而表与表之间是可以有一定的关联关系,这种关联关系通过外键约束实现。

(2)多表的分类

1.一对一:

*适用场景 :人和身份证。一个人只有一个身份证,一个身份证只能对应一个人。

              用户表-------------用户详情表。

              手机号登录表------微信号登录表。

             商品表-------------商品详情表。

*-建表原则 :在任意一个表建立外键,去关联另外一个表的主键。

2.一对多:

*适用场景 :用户和订单。一个用户可以有多个订单。 商品分类和商品。一个分类下可以有多个商品。 部门和员工。

*建表原则 :在多的一方,建立外键约束,来关联一的一方主键。

3.多对多:

*适用场景 :学生和课程。一个学生可以选择多个课程,一个课程也可以被多个学生选择。

*建表原则 :需要借助第三张中间表,中间表至少包含两个列。这两个列作为中间表的外键,分别关联两张表

(3)多表设计范式:三范式:

-- 1.第一范式(确保每列保持原子性)

-- 2.第二范式(确保表中的每列都和主键相关)

-- 3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

(二)多表查询

(1)笛卡尔积:

A表4条数据,B表4条数据

 笛卡尔积:AB=44=16条 (A表每一条数据和B表每一条数据排列组合)

(A列 B列都显示)

(2)内连接查询:

1.查询原理 内连接查询的是两张表有交集的部分数据(有主外键关联的数据)。

内连接相当于 查询表A和表B的交集数据

2.查询语法 显式内连接: SELECT 列名 表名1[INNER] JOIN 表名2 ON 条件;

隐式内连接: SELECT 列名 FROM 表名1,表名2 WHERE 条件;

(3)外连接查询:

1.左外连接:

查询原理:查询左表的全部数据,和左右两张表有交集部分的数据。

查询语法:SELECT 列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 条件;

2.右外连接:

查询右表的全部数据,和左右两张表有交集部分的数据。

查询语法:SELECT 列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 条件;

(4)子查询

(1)子查询概念 :查询语句中嵌套了查询语句,我们就将嵌套的查询称为子查询。

(2) 子查询分类:

1.子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断 (普通条件)

查询语法:SELECT 列名 FROM 表名 WHERE 列名=(SELECT 列名 FROM 表名 [WHERE 条件]);

2.子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断 (in)

查询语法:SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]);

3.子查询语句结果是多行多列,子查询语句作为虚拟表 (from)

查询语法:SELECT 列名 FROM 表名 [别名],(SELECT 列名 FROM 表名 [WHERE 条件]) [别名] [WHERE 条件];

(5)自关联查询

在同一张表中数据有关联性,我们可以把这张表当成多个表来查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值