1事务
2索引
3备份
4homework
2常用时间处理函数
date_add(now(),INTERVAL -1 MINUTE)
date_sub()
date_format(时期,'%y-%m')
now()/current...
3
left join
right join
事务
需要知道
1事务的概念
2ACID
原子性,一致性,隔离性 (隔离级别) 持久性
3不同隔离级别对应的数据问题
读未提交--》脏读
读已提交--》不可重复读 数据内容的改变 update
可重复读--》 mysql默认 幻读(记录条数的改变,insert,delete)
串行话--》可以解决上述问题
4基本使用步骤
(1)取消事务自动提交,mysql --自动提交 oracle--》 默认不是自动提交的
(2)开启事务:start transaction , conn.setAutoCommit(false)
(3)执行 语句
(4)commit (try块中) /rollback catch块中
两大引擎 MyISAM InnoDB
是什么
就是一件事情, 这件事情可能涉及多个sql语句,这多个语句应该是一个整体
特性ACID
A automic 原子性,事务是一个整体,不可分割,要么成功 要么失败
C consistency 一致性,状态要么是成功前,要么是执行成功之后的
I Isolation 隔离性 多个事务之间相互隔离, 张三给李四转钱,李四给张三转,两个独立的事务互不影响
D durability 持久性,数据都要持久化到DB中
事务怎么玩
注意 使用事务时应先关闭自动提交 即手动提交事务!!!
回滚点
期望回滚到某个状态,而不是最开始的那个状态, 此时,可以通过设置回滚点,直接回滚到这个回滚点即可
在某些成功操作后,后续操作有可能有失败的,但不管成功还是失败,前面操作都已经成功,可以再当前成功的位置设置一个回滚点, 可以供后续失败操作返回该位置,而不是返回所有操作,这个点称之为回滚点
savepoint 是在数据库事务处理中实现“子事务”,subtransaction,也称为嵌套事务的方法,事务可以回滚到savepoint,而不影响savepoint创建前的变化,不需要放弃这个事务
设置回滚点 savepoint名字
回到回滚点 rollback to 名字
隔离级别
脏读 一个事物读取到了另一个事务中尚未提交的数据
不可重复读 一个事物中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时引发的问题
幻读 一个事务,中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是insert或delete时引发的问题。
上面的级别最低,下面的级别最高,“是”表示会出现这种问题,“否”表示不会出现这种问题。
级别 名字 隔离级别 脏读 不可重复读 幻读 数据库默认隔离级别
1 读未提交 readuncommitted 是 是 是
2 读已提交 read committed 否 是 是 oracle 和sql server
3 可重复读 repeatable read 否 否 是 mysql
4串行化 serializable 否 否 否
隔离级别越高 性能越差 安全性越高
注意:设置事务隔离级别 ,需要退出mysql 再重新登陆 才能看到 隔离级别的变化
DCL: (Data Control Language)
在后面的学习中 可能会用到远程连接的授权
公司中 机会概率也小 中大厂
备份
小概率会操作到!
关系型:业务库,订单,加购,库存,订单明细, java开发
关系型数据库的数据,-》 大数据的数仓中--》你关心的是数据的导入,数据的建模和分析--》
大数据里面的备份方式(这才是要关心的)
可视化工具备份,命令备份
数据库备份必要性
- 保证重要数据不丢失
- 数据转移
mysql数据库备份方法
- mysqldump 备份工具
- 数据库管理工具,如sqlyog
- 直接拷贝 数据库文件和相关配置文件
索引
java初级必问
需要知道:
1作用
2分类
3适合的场景
类似字典目录页 提高检索速度
提高查询速度
确保数据的唯一性,主键
可以加速表和表之间的连接,实现表与表之间的参照完整性
使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
全文检索字段进行搜索优化
缺点
占有一定的磁盘空间
对于DML操作,可能需要更新索引。
分类:
主键索引 PRIMARY KEY
唯一索引 UNIQUE
其实我们建表的时候,为列加上唯一约束,他就会添加一个唯一索引
常规索引 INDEX
一般我们建立 组合索引 在多个字段上添加索引 对经常 查询的字段 可以使用 组合索引
作用:快速定位特定数据
注意
index和key关键字都可设置常规索引
应加在查找条件的字段
不宜添加太多常规索引,影响数据的插入,删除和修改
全文索引FULLTEXT
作用 快速定位特定数据
注意
只能适用于MyISAM类型的数据表,
只能适用于CHAR,VARCHAR,TEXT数据列类型
适合大型数据集
语法:
创建索引:
这是最基本的索引,他没有任何限制,他有以下几种创建方式,
create index indexname on table_name(colomun_name)
如果是char varchar类型,length可以小于字段实际长度,如果BLOB和TEXT类型,必须指定length
修改表结构(添加索引)
alter table tablename add index indexname(colomnname)
创建索引
创建表时添加
建表后追加
ALTER TABLE 表名 ADD 索引类型(数据列名)
删除索引
DROP INDEX 索引名 ON 表名
ALTER TABLE 表名 DROP INDEX 索引名
ALTER TABLE 表名 DROP PRIMARY KEY
查看索引
show index(或keys)from 表名;
索引准则
索引不是越多越好
不要对经常变动的数据加索引
小数据量的表建议不要加索引
索引一般应加在查找条件的字段
如何体现索引有效
explain
https://blog.csdn.net/why15732625998/article/details/80388236
mysql高级 explain用法和结果分析
explain简介
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈
➤ 通过EXPLAIN,我们可以分析出以下结果:
- 表的读取顺序
- 数据读取操作的操作类型
- 哪些索引可以使用
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
➤ 使用方式如下:
EXPLAIN +SQL语句
EXPLAIN SELECT * FROM t1
执行计划包含的信息
2. 执行计划各字段含义
2.1 id
select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
id的结果共有3中情况
id相同,执行顺序由上至下
id相同 执行顺序由上至下
[总结] 加载表的顺序如上图table列所示:t1 t3 t2
id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
id相同不同,同时存在
如上图所示,在id为1时,table显示的是 <derived2>
,这里指的是指向id为2的表,即t3表的衍生表。
2.2 select_type
常见和常用的值有如下几种: