day08数据库开发-MySQL 7.29
1.DSL:数据查询语言,用来查询数据库中表的记录
基本查询 | select from | 字段列表 表名列表 | ||||||||||
1.查询多个字段:select 字段1, 字段2, 字段3 from 表名; 2.查询所有字段(*为通配符):select * from 表名; 3.设置别名:select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名;(as可不写) 4.去除重复记录:select distinct 字段列表 from 表名; | ||||||||||||
条件查询(where) | where | 条件列表 | ||||||||||
select 字段列表 from 表名 where 条件列表 ; | ||||||||||||
比较运算符 | > | >= | < | <= | = | |||||||
<> 或 != | between..and.. | In(...) 多选一 | like _ % | is null | ||||||||
逻辑运算符 | and 或 && | or 或 || | not 或 ! | |||||||||
分组查询(group by) | group by having | 分组字段列表 分组后条件列表 | ||||||||||
select 聚合函数(字段列表) from 表名 | ||||||||||||
聚合函数 | count | max | min | avg | sum | |||||||
| ||||||||||||
select 字段列表 from 表名 [ where条件] group by 分组字段名 [ having分组后过滤条件 ]; | ||||||||||||
1.执行时机不同:where是分组之前过滤,不满足where条件,不参与分组;而having是分组之后对结果过滤。 2.判断条件不同:where不能对聚合函数进行判断,而having可以。 3.执行顺序: where > 聚合函数 > having 。 | ||||||||||||
If(条件,‘true的 值’,‘false的值’) | ||||||||||||
case when 字段名=值1 then ‘值1’ when 字段名=值2 then ‘值2’....end case 字段名 when 值1 then ‘值1’ when 值2 then ‘值2’....end | ||||||||||||
排序查询(order by) | order by | 排序字段列表 | ||||||||||
select 字段列表 from 表名where 条件列表order by 字段1排序方式1 , 字段2 排序方式2 | ||||||||||||
排列方式:asc 升序 默认值 可不写, desc 降序 | ||||||||||||
分页查询(limit) | limit | 分页参数 | ||||||||||
select 字段列表 from 表名 limit 起始索引, 每页数量 ; | ||||||||||||
1.起始索引从0开始, =(查询页数-1)*每页数量 2.第一页可以不写起始索引 |
2.多表设计
一对多 | 实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。 | 建立外键关联,以保证数据的一致性和完整性的 |
创建表时指定 create table 表名( 字段名 数据类型, ... [constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名) ); 建完表后,添加外键 alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名); | ||
物理外键:使用 foreign key 定义外键关联另外一张表。 缺点:1.影响增、删、改的效率(需要检查外键关系)。 2.仅用于单节点数据库,不适用与分布式、集群场景。 3.容易引发数据库的死锁问题,消耗性能。 逻辑外键:在业务层逻辑中,解决外键关联。(不定义外键,管理员自己去处理) 通过逻辑外键,就可以很方便的解决上述问题。 | ||
一对一 | 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE) | |
多对多 | 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 | |
primary key(表1主键,表2主键) |