MySql思维总结(这一篇就够!)

Posted Long桑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql思维总结(这一篇就够!)相关的知识,希望对你有一定的参考价值。

一、数据的相关概念

数据库的好处

  • 可持久化数据到本地
  • 结构化数据

数据库的常见概念

  • DB:数据库,存储数据的容器
  • DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
  • SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言

数据库存储数据的特点

  • 1、数据存放到表中,然后表再放到库中
  • 2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己
  • 3、表中有一个或多个列,列又称为“字段”,相当于java中“属性”
  • 4、表中的每一行数据,相当于java中“对象”

常见的数据库管理系统

  • MySQL、Oracle、DB2、SqlServer

二、DQL(数据查询语言)

基础查询

  • 查询常量:
    select 常量值;
    注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要

  • 查询函数
    select 函数名(实参列表);
    起别名: AS
    去重(DISTINCT):select distinct 字段名 from 表名;
    加号(+):

条件查询

语法:
select查询列表 ③
from表名 ①
where筛选条件 ②

  • 简单条件运算符

      	>,<,=,<> or != ,>=,<=
      	安全等于:<=>
    
  • 逻辑运算符

      	&&	and
      	ll	or
      	!	not
    
  • 模糊查询

      	like:一般搭配通配符使用,可以判断字符型或数值型
      	通配符:%多个任意字符,
      			_单个任意字符
      	between ... and ...
      	IN(集合)
      	IS NULL/ IS NOT NUll:用于判断NULL值
    
    • escape(声明转义字符)

获取客户端的字符集编码格式

分组查询

常见函数

  • 字符函数

      concat: 拼接
      substr: 截取子串
      upper: 转换成大写
      lower: 转换成小写
      trim: 去前后指定的空格和字符
      ltrim: 去左边空格
      rtrim: 去右边空格
      replace: 替换
      lpad: 左填充
      rpad: 右填充
      instr: 返回子串第一次出现的索引
      length: 获取字节个数	
    
  • 数学函数

      round: 四舍五入
      rand: 随机数
      floor: 向下取整
      ceil: 向上取整
      mod: 取余
      truncate: 截断
    
  • 日期函数

      now: 当前系统日期+时间
      curdate: 当前系统日期
      curtime: 当前系统时间
      str_to_date: 将字符转换成日期
      date_format: 将日期转换成字符
    
  • 流程控制函数

      	if 处理双分支
      	case语句 处理多分支
      			情况1:处理等值判断
      			情况2:处理条件判断
    
  • 其他函数

      version: 版本
      database: 当前库
      user: 当前连接用户
    

分组函数

	* count:计算个数
	* 一般选择非空的列:主键
	* count(*)
	* max:计算最大值
	* min:计算最小值
	* sum:计算和
	* avg:计算平均值
	* 特点:
		1、以上五个分组函数都忽略null值,除了 count(*)
		2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
		3、都可以搭配distinct使用,用于统计去重后的结果
		4、count的参数可以支持:
	        * 字段、*、常量值,一般放1
	* 注意:聚合函数的计算,排除null值。
		解决方案:
			* 选择不包含非空的列进行计算
			* IFNULL函数

链接查询

  • 内连接

      select *						⑦
      from 表1						①
      inner join	表2 on 连接条件  ②
      where		筛选条件 			③
      group by  分组的列表			④
      having 分组后的筛选			⑤
      order by 排序条件				⑥
      limit 起始值,长度				⑧
    

  • 外连接(left:左外连接,表1为主表;right:右外连接,表2为主表)

      select *						⑦
      from 表1						①
      left/right join	表2 on 连接条件  ②
      where		分组前筛选条件 			③
      group by  分组的列表			④
      having 分组后的筛选			⑤
      order by 排序条件				⑥
      limit 起始值,长度				⑧
    

  • 自连接

三、DML(数据操作语言)

  • 对“表内数据“的操作

插入

① insert into 表名(列名,…) values(值1,…)
- 支持插入多行(用逗号隔开):values(值1,…),(值1,…);
- 持子查询(插入):

②insert into 表名 set 列名=值,列名=值,…

修改

	update 表名 set 列=新值,列=新值,... where 筛选条件

删除

	delete from 表名 where 筛选条件 limit ...

delete与truncate比较

四、DDL(数据定义语言)

  • 对于“库和表的管理”
    创建:create
    修改:alter
    删除:drop

库的管理

表的管理

  • 创建(create):create table (if not exists) 表名;

  • 修改(alter):

  • 删除(drop):drop table (if exists) 表名;

  • 复制表:

数据类型

  • 数值型

  • 浮点型

  • 字符型

  • 日期型

六大约束

一、主键约束(primary key)

1.单一主键:[字段] primary key
2.联合主键:primary key([字段],[字段])

二、自增约束(primary key auto_increment)

  • 标识列(又称自增长列)对整型数据进行自增。

三、唯一约束unique(id,name)
四、非空约束(not null)
五、默认约束default [值]
六、外键约束(foreign key([字段]) references [主表[字段]])

  • 只能使用标记约束去定义

添加约束的时机

一、创建表时

二、修改表时

primary key 与 unique 对比

五、事务(只针对DML)

事务的ACID属性

  • 查看变量

      SHOW VARIABLES LIKE 'autocommit';
    
  • 隐式事务
    包含select、insert、update、delete 语句

  • 显式事务

savepoint(节点名):设置保存点

事务的隔离级别

六、视图

  • create view 视图名 as 查询语句

      mysql 5.1 版本出现的新特性,虚拟的,通过表动态生成 ,只保存sql逻辑,不保存结果
    
  • 修改

      1、create or replace view 视图名 as 查询语句 (如果视图存在则修改,不存在则创建)
      2、alter view 视图名 as 查询语句
    
  • 删除

      drop view 视图1,视图2,....
    
  • 具备以下特点的视图不允许更新

七、变量

系统变量

  • 全局变量

      	服务器层面上的,必须拥有super权限才能为系统变量赋值,作用域为整个服务器,也就是针对于所有连接(会话)有效
    
  • 会话变量

      	服务器为每一个连接的客户端都提供了系统变量,作用域为当前的连接(会话)
    

自定义变量

  • 用户变量

      	作用域为当前链接(会话)
    

  • 局部变量

      	作用域:begin end中,且只能放在第一句
    

八、存储过程与函数(mysql里不能运行,在cmd里运行)

  • 写存储过程与函数开始之前都必须定义结束字符:

      delimiter  $;
    

存储过程


函数

  • 视图与存储过程与函数的好处
    • 说明:都类似于java中的方法,将一组完成特定功能的逻辑语句包装起来,对外暴露名字好处:
      • 1、提高重用性
      • 2、sql语句简单
      • 3、减少了和数据库服务器连接的次数,提高了效率

九、流程控制结构

分支结构

1、if语句:

if(表达式1,表达式2,表达式3)
如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值

2、case结构

3、if结构

循环结构

while、loop、repeat



  • 这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称(标签)

十、经典例题

  • 题:向该表插入指定个数的,随机的字符串
  • 答:

以上是关于MySql思维总结(这一篇就够!)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL面试题看这一篇就够了

MySQL索引从基础到原理,看这一篇就够了

证明「市场分析」能力,这一篇就够了

敏捷管理系列-学习实践Scrum,看这一篇就够了!

四面阿里Java开发岗,看完这一篇就够了

总结丨Spring 源码学习,看这一篇就够了