数据库事务、索引

1.常用的时间函数

时间函数描述
now()返回当前的日期及时间
curdate()返回当前的日期
curtime()返回当前的时间
week()返回指定时间是一年中的第几周
year()返回指定时间的年份
minute()返回指定时间的分钟
hour()返回指定时间的小时数
monthname()返回指定时间的月份名
date_format()格式化指定时间
date_add()返回加上一个时间间隔的时间值

2.sql语言分类

DDL:数据定义语言,常用关键词:create、drop、alter、show

DCL:数据控制语言,常用关键词:grant、if

DML:数据操作语言,常用关键词:insert、update、delete

DQL:数据查询语言,常用关键词:select

3.事务

①指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么都成功,要么都失败

②事务特点(ACID)

特征含义
原子性(Atomicity)

每个事务都是一个整体,不可再拆分,事务中所有的sql语句要么都执行成功,要么都失败

一致性(Consistency)事务在执行前数据库的状态与执行后数据库的状态保持一致。
隔离性(Isolation)事务与事务之间不应该相互影响,执行时保持隔离的状态
持久性(Durability)一旦事务执行成功,对数据库的修改是持久的,就算关机,也是保存下来的

③并发访问的问题

并发访问的问题含义
脏读一个事务读取到了另一个事务中尚未提交的数据
不可重复读一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时引发的问题
幻读一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是insert或delete时引发的问题

事务流程

begin;

select|update|insert|delete;

commit;|rollback;

事务隔离级别脏读不可重复读幻读
读未提交 READ UNCOMMITTED
读提交 READ COMMITTED
可重复读 REPEATABLE READ(mysql 默认的隔离级别)
串行化 SERIALIZABLE

查看当前的数据库的隔离级别

5.7+

select @@transaction_isolation;

5.7-

select @@tx_isolation;

修改事务隔离级别

set 作用域 transaction isolation level 事务隔离级别

作用域: session 当前页面 global 全局

查看当前有多少事务在运行

select * from information_schema.INNODB_TRX

4.分析事务隔离级别

复现脏读

(1)在窗口A修改隔离级别为读未提交

(2)新开窗口B查询事务隔离级别是否修改成功,如果修改成功,进入第三步,如果没有成功,

多试几次

(3)在窗口B,开启事务A,修改id为1的学生年龄从10变为100

(4)新开窗口C,开启事务B,查询id为1的学生年龄,100

(5)返回窗口B,用rollback结束事务A

(6)返回窗口C,再次查询,结束事务B,10

解决脏读,出现不可重复读

(1)修改事务隔离级别为读提交以上的级别

(2)重复操作去验证是否解决

解决不可重复读

(1)修改事务隔离级别为可重复读以上的级别

(2)重复操作去验证是否解决

5.索引

(1)索引是帮助Mysql高效获取数据的数据结构

(2)索引的优势

①提高查询效率(降低IO使用率)

②降低CPU使用率

(3)索引的弊端

①索引本身很大,可以存放在内存或硬盘上,通常存储在硬盘上

②索引不是所有情况都使用,比如少量数据、频繁变化的字段、很少使用的字段

③索引会降低增删改的效率

(4)索引的分类

①主键索引

②普通索引

存在表的情况下添加索引

alter table 表名 add index 索引名(作用的字段名)

创建表的情况下添加索引

create table 表名( 字段1 数据类型, 字段2 数据类型, index 索引名(作用的字段名) )

查看当前查询语句可用及用到的索引

EXPLAIN select * from 表名 where 字段名 = 值

删除索引

alter table 表名 drop index 索引名

③唯一索引

④联合索引

⑤全文索引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值