MySql思维总结(这一篇就够!)
Posted Long桑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql思维总结(这一篇就够!)相关的知识,希望对你有一定的参考价值。
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(声明转义字符)
- 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、减少了和数据库服务器连接的次数,提高了效率
- 说明:都类似于java中的方法,将一组完成特定功能的逻辑语句包装起来,对外暴露名字好处:
九、流程控制结构
分支结构
1、if语句:
if(表达式1,表达式2,表达式3)
如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值
2、case结构
3、if结构
循环结构
while、loop、repeat
- 这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称(标签)
十、经典例题
- 题:向该表插入指定个数的,随机的字符串
- 答:
以上是关于MySql思维总结(这一篇就够!)的主要内容,如果未能解决你的问题,请参考以下文章