Web后端开发——数据库

DQL

数据查询语言,用来查询数据库中表的记录。

语法

基本查询

        查询多个字段:select  字段1, 字段2, 字段from   表名;

        查询所有字段(通配符):select  *  from   表名;

        设置别名:select  字段1  [ as  别名1 ] , 字段2  [ as  别名2 ]   from   表名;

        去除重复记录:select  distinct  字段列表  from   表名;

         * 号代表查询所有字段,在开发中少用(不直观、影响效率)。

条件查询

        条件查询:select  字段列表  from   表名   where   条件列表 ;

运算符

between...and...

在某个范围之内(含最小、最大值)

in(...)

在in之后的列表中的值,多选一

like 占位符

模糊匹配(_匹配单个字符, %匹配任意个字符)

is null

是null

排序查询

条件查询: select  字段列表  from   表名     order  by  字段 排序方式 1 , 字段 排序方式 2 ;
排序方法: ASC :升序(默认值) DESC :降序

分页查询

        分页查询:select  字段列表  from   表名  limit  起始索引, 查询记录数 ;l分页查询:select  字段列表  from   表名  limit  起始索引, 查询记录数 ;

聚合函数

将一列数据作为一个整体,进行纵向计算

 语法;select  聚合函数(字段列表)  from   表名 ;

分组查询

分组查询: select  字段列表  from   表名  [ where   条件 group   by  分组字段名  [ having  分组后过滤条件 ];
where与having区别
1. 执行时机不同: where 是分组之前进行过滤,不满足 where 条件,不参与分组;而 having 是分组之后对结果进行过滤。
2. 判断条件不同: where 不能对聚合函数进行判断,而 having 可以。

多表设计

  • 一对多(多对一)
  • 多对多
  • 一对一

一对多(多对一) 举例:一个部门对应多个员工,一个员工对应一个部门

实现一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。

-- 创建表时指定
create table 表名(
	字段名    数据类型,
	...
	[constraint]   [外键名称]  foreign  key (外键字段名)   references   主表 (主表列名)	
);


-- 建完表后,添加外键
alter table  表名  add constraint  外键名称  foreign key (外键字段名) references  主表(主表列名);
物理外键:
概念: 使用 foreign key 定义 外键关联另外一张表
缺点:
l 影响增、删、改的效率(需要检查外键关系)。
l 仅用于单节点数据库,不适用与分布式、集群场景。
l 容易引发数据库的死锁问题,消耗性能
逻辑外键:
概念:在业务层逻辑中,解决外键关联。
通过逻辑外键,就可以很方便的解决上述问题。

一对一:

举例 : 用户 与 身份证信息 的关系
关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
实现 : 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的 (UNIQUE)

多对多

举例 : 学生 与 课程的关系
关系 : 一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现 : 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

signed:以tinyint为例,它的取值范围-128-127,加不加signed都默认此范围。加上unsigned表示范围0-255,其实相当于把负数那部分加到正数上。例如身高、体重或者年龄等字段一般不会为负数,此时就可以设置一个 UNSIGNED ,不允许负数插入。

decimal:decimal(M,N) 
M表示:不包括小数点,不包括符号位,所能存数字的总位数(包括小数部分和整数部分) 
N表示:小数部分数字的位数,由此可知整数部分的位数为M-N;

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值