day08 操作索引脏读、幻读、不可重复读 python复习

昨日内容复习

视图

把sql语句查询结果保存下来,结果就叫视图视图的数据来自于原始表,在硬盘中只有表结构
create view 视图名称 as SQL语句;

触发器

对表执行增、删改操作后自动触发的功能,类似于crontab
create trigger 触发器名称 before/after insert/delete/update on 表名
for each row
beginSQL语句
end# 触发器名字tri_after_insert_t1触发器_之前/之后_插入/修改/删除_表名
# 临时修改SQL语句结束符 记得用完再改回来delimiter $$

存储过程

也可以叫做python里面的自定义函数
create procedure p1(in m int,out n int) ...      #in 传入    out:传出    inout:可以传入也可以传出
call p1(1,2)
# 在pymysql模块中也可以调用存储过程cursor.call_proc('存储过程名字',参数)

事务

ACID原子性 :每个事务都是不可分割的最小单位,同一个事务内的多个操作 要么同时成功,要么同时失败一致性:事务从一个一致性状态变为另一个一致性状态隔离性:事务与事务之间彼此互不打扰,事务彼此之间都是独立的 也叫独立性持久性:一个事务一旦提交,他对数据库的改变应该是是永久的
start transaction;  # 开启事务
rollback  # 回滚  回滚之后这个事务就结束了
commit  # 确认   确认了这个事务就结束了

函数

#只能在sql语句中使用 不能单独调用  类似于python的内置函数
# 1.移除指定字符
Trim、LTrim、RTrim# 2.大小写转换
Lower、Upper
# 3.获取左右起始指定个数字符
Left、RightSoundex  根据发音相近的date_format('时间字段','时间格式')date()year()month()
#按照年月分组
Y  m  d  H  M  S     X
年 月 日 时 分 秒     时分秒select date_format(sub_time,'%Y-%m'),count(id) from blog group by date_format(sub_time,'%Y-%m');

流程控制

# if判断
if  条件 then子代码;#不满足条件会执行下面的
elseif 条件1 then子代码;
else #上面都不满足子代码endif# while循环while 条件 do满足执行这个;改变条件;
end while    

索引

什么是索引索引就是为了加快数据的查询速度 在计算机底层的表现形式就是一些数据结构(树)
数据结构:二叉树b树    枝节点和叶子节点没有指针b+树   叶子节点添加了指针b*树   枝节点添加了指针(叶子节点也有)
"""
指针的添加主要是为了简介范围查询问题精确查找取决于树的高度
"""我们在查询数据的时候如果使用的条件创建了索引则可以加速查询如果没有创建索引则无法使用加速查询的功能
#索引的分类
1.primary key除了可以加快查询之外 还有额外的约束条件
2.unique key除了可以加快查询之外 还有额外的约束条件
3.index key只能加快数据查询 没有其他额外的功能

今日内容概要

如何操作索引

SQL语句控制索引的添加 删除 查询

怎么判断当前sql语句是否走了索引

优化SQL语句

脏读、幻读、不可重复读等理论

简单的理论

python复习

今日内容详细

  1. 如何操作索引

    #创建唯一索引需要提前排查是否有重复数据select count(字段) from t1         #先查询这列多少内容select count(distinct(字段)) from t1  #在去重查询
    #查看表内部索引值show index from 表名;
    #添加索引之 主键索引                              #起名字要见名知意alter table 表名 add primary key pri_id(id);  唯一索引                          #起名字要见名知意alter table 表名 add unique key uni_age(age)普通索引                         #起名字要见名知意alter table 表名 add index idx_name(name)前缀索引(属于普通索引) #根据字段前n个字符建立索引#什么时候会用到前缀索引    某个字段很多数据 需要他做成索引 可以使用前缀索引避免对大列建索引,如果有就使用前缀索引eg:博客内容 百度搜索内容等alter table t1 add index idx_name(name(4))   #里面的数字表示把前几个字符做成索引
    联合索引(属于普通索引)相亲平台 搜索心仪对象的时候   多个选项# 遵循最左匹配原则 最左面的是最常用的,会把最左面的看得最重gender money height beautiful alter table t1 add index idx_all(name,age,sex)
    #删除索引alter table t1 drop index 索引名
    
  2. 怎么判断当前sql语句是否走了索引(explain句式)

    #只需要写在要执行的sql语句前面  比如 explain selecr * from user where id =1;
    全表扫描不走索引 一行行查找数据 效率极低 生产环境下尽量不要书写类似SQL
    索引扫描走索引 加快数据查询 建议书写该类型SQLexplain就是帮助我们查看SQL语句属于那种扫描
    # 常见的索引扫描类型:   查看type这个里面内容 只要不是all就表示走了索引扫描  但是index和all差别不大 1)index2)range3)ref4)eq_ref5)const6)system7)null
    从上到下,性能从最差到最好,我们认为至少要达到range级别 range 级别往上任意就ok
    # 不走索引情况(起码记忆四条及以上)1.没有查询条件,或者查询条件没有建立索引2.查询结果集是原表中的大部分数据(25%以上) #查询结果的数据是原表中%25以上数据 即使使用了索引 他也不会走索引  ,可以用limit控制一下3.索引本身失效,统计数据不真实4.查询条件使用函数在索引列上或者对索引列进行运算,运算包括(+,-,*等) #比如where id-1等等5.隐式转换导致索引失效#:字段创建是字符类型 查询使用整型 不走索引  创建字段用的什么类型 查询就要用什么类型 6.<> ,not in 不走索引单独的>,<,in 有可能走,也有可能不走,和结果集有关,尽量结合业务添加limit、or或in尽量改成union7.like "%_" 百分号在最前面不走8.单独引用联合索引里非第一位置的索引列#最左匹配原则  第一个不匹配 就不匹配了 比如 用name age sex 做联合索引     查询时候 用age sex 那么不走索引  如果想走索引需要name开始"""
    索引的创建会加快数据的查询速度 但是一定程度会拖慢数据的插入和删除速度
    """
    
  3. 脏读、幻读、不可重复读等理论

在SQL标准中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改
InnoDB支持所有隔离级别set transaction isolation level 级别1.read uncommitted(未提交读)  #隔离级别是未提交读才会发生脏读事务中的修改即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,这一现象也称之为"脏读"#transaction 事务开启后 不执行 commit 其他事务是可见的
2.read committed(提交读)  #innodb 默认级别大多数数据库系统默认的隔离级别一个事务从开始直到提交之前所作的任何修改对其他事务都是不可见的,这种级别也叫做"不可重复读"
3.repeatable read(可重复读)     # MySQL默认隔离级别能够解决"脏读"问题,但是无法解决"幻读"# 幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。所谓幻读指的是当某个事务在读取某个范围内的记录时另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录会产生幻行,InnoDB和XtraDB通过多版本并发控制(MVCC)及间隙锁策略解决该问题
4.serializable(可串行读)强制事务串行执行,很少使用该级别 #解决脏读 幻读 不可重复读 但是执行效率太低 不使用

python复习

#什么是编程程序员将自己的思维逻辑和写法用计算机能识别的语言写下来的过程就叫做编程编程的结果是产生一堆文件
#变量name='zhang'
# 基本数据类型整型intage = 18浮点型floatsalary = 3.1字符串strname = 'jason'  # 引号引起来的部分列表list'''中括号括起来 内部存放多个元素 元素与元素之间逗号隔开 元素可以是任意数据类型'''l = [111, 222, 333]字典dict"""大括号括起来 内部存放多个元素 元素是k:v键值对k是v的描述性性质的信息 一般是字符串 不可变类型v是真正的数据 相当于变量值 可以是任意数据类型"""d = {'name':"jason",'pwd':123}布尔值boolTrue FalseFalse:0 None '' {} []...元组tuple"""小括号括起来 内部存放多个元素 元素与元素之间逗号隔开 元素可以是任意数据类型元组内索引指向的元素内存地址无法修改"""t = (111,222,333)集合set"""大括号括起来 内部存放多个元素 元素与元素之间逗号隔开元素只能是不可变类型"""se = {1,2,3,4,5,6}
#内置方法int() float() str()
字符类型内置方法len(字符串名称) strip()#strip,lstrip,rstrip  去除首尾符号或者什么的 replace可以实现一样操作 不过replace更多用于替换msg='      hello world      'print(msg.strip())# strip移除字符串首尾指定的字符(默认移除空格)#还有一个replace print(msg.replace(' ',''))#第一个值写的是要被换掉的名称比如空格等,第二个表示换成什么#还可以有第三个参数 表示换几个 换几个空格 可以不是空格#split()msg = "egon:18:male:10"   res = msg.split(':')   #表示通过:把字符串分割成一块一块的成一个列表#lower() upper() islower() isupper()小写      大写     是否小写     是否大写
list列表内置方法.append()  尾部追加元素.insert(0,'值')  #指定位置插入元素  前面是索引 后面是值 如果插入的索引有值,原来的值会往后一位 新的值代替原来的值的位置 .extend()  扩展列表,也可以说一次性在列表尾部添加多个元素.remove()  指定移除列表内的元素 括号指定value值.pop()     按照索引弹出元素 默认删除最后一个.sort()    排序
dict字典内置方法.get()  按照key取值 key不存在默认返回None(不报错).keys()    #获取所有key.values()   #获取所有value.items()   #获取所有key和value.pop  #通过指定字典的key来删除字典的键值对
# 流程控制if判断if 条件1:条件1成立之后执行的子代码elif 条件2:条件1不成立条件2成立执行的子代码else:上述条件都成立的情况下执行的子代码while循环while 条件:条件成立之后执行的循环体代码continue、breakfor循环for 变量名 in 可迭代对象:  # 字符串 列表 字典 ...for循环子代码
# 文件操作with open(文件路径,模式,encoding) as 变量名:子代码1.转义 r'C:\a\n'2.模式读写模式 r (默认):只读模式w 只写a 只写(追加写)新写的内容加到旧的内容后面操作模式 t (默认):无论读写都是以字符串为单位的,必须指定encoding参数(编码)b 无论读写都是以bytes为单位也就是二进制,不需要指定encoding参数,需要指定deconding(解码)  比如操作图片 视频等3.encoding用于指定编码 并不是必须的参数'''针对文件内容的读取 采用for循环迭代读取'''
# 函数def 函数名(参数1,参数2):"""函数注释"""函数体代码return 返回值
# 函数的参数位置参数 关键字参数 默认参数 可变长参数(*args **kwargs)"""特殊符号*与**有两个应用场景1.在函数的形参中用于接收多余的位置和关键字参数分别组织成元组和字典赋值给后面的变量名*赋值成元组      **赋值成字典2.在函数的实参中*会将列表和元组内的元素打散成位置参数一一传入 **会将字典打散成关键字参数传入 **后只能跟字典"""
#装饰器在不改变被装饰对象"源代码"以及"调用方式"的基础之上添加新的功能
def outter(func):def inner(*args,**kwargs):print("我是之前")res=func(*args,**kwargs)         #调用原来的index 并获取返回值print("我是之后")return res   #index返回值return inner@outter #等同于 index=outter(index)  返回inner的内存地址 赋值给index
def index(): #相当于调用innerprint("im a index >>>>")index()
#函数的递归函数在运行期间直接或者间接调用自己递归递推回溯
# 三元表达式 print( 'ok' if x>y else 'no'  ) # 三元指的是 成立返回结果,,条件   不成立返回结果
#匿名函数lamada 传入得值 :return的值 print (max(数据名,key=lamada k: 数据名[k] ))#模块pip3 install 模块名import 模块名模块名.方法from ... import 模块名os模块、sys模块、time模块、json模块
#软件目录开发规范ATM里面的文件夹划分以及名称bin 执行文件  不是必须有conf 配置文件  一堆变量core  核心代码  被导入模块 ,一些功能lib   自定义仓库 自定义模块logs  日志db    注册的账号密码等,可有可无 数据库rademe   说明手册 说明书# src.py 编写程序地方#核心代码

开发目录规范

day08 操作索引脏读、幻读、不可重复读 python复习相关推荐

  1. mysql 中的脏读与幻读_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

  2. mysql 可重复读 悲观锁_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

  3. mysql悲观锁会有脏数据吗_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

  4. MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

    #TCL事物控制语言 : /*   Transaction control language : 事物控制语言   事务:     一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...

  5. 数据库几个事务相关的知识点(脏读幻读不可重复读以及如何避免)

    0. 设置MYSQL的隔离界别 # 查询数据库当前事务隔离级别 mysql> select @@global.transaction_isolation,@@transaction_isolat ...

  6. 脏读幻读不可重复读的区别

    1.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 例如: 张三的工资为5000,事务A中把他的工 ...

  7. 事务的4种隔离级别,3大问题,脏读幻读不可重复读

    一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...

  8. 脏读 幻读 不可重复读 及其解决方法

    一个事务读到另外一个事务还没有提交的数据,我们称之为脏读.解决方法:把事务隔离级别调整到READ COMMITTED 一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读.解决方法: ...

  9. mysql数据库的事务 acid 隔离级别 脏读 脏写 幻读 不可重复读

    事务的四大特征 原子性(atomicity):要么全部提交(commit),要么全部回滚(rollback) 一致性(consistency):数据从一个合法状态转换成另一种合法状态 隔离性(isol ...

最新文章

  1. python详细安装教程linux-Linux下python3.7.0安装教程
  2. 分享一个slide:花式自然语言处理
  3. android xe 调用 java,Delphi XE6 for Android 让手机震动(调用Java的函数)
  4. python时间减法_干!一张图整理了 Python 所有内置异常
  5. Docker持续交付部署类型
  6. Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)...
  7. 达摩院 2020 预测:量子霸权指日可待!
  8. python基本代码教程-(Python基础教程之三)Python代码中添加注释
  9. python-3高级特征
  10. 集结六大行业领袖,「数据科学家」新课全球首发!
  11. 3个极品在线PDF转换成WORD服务网站,比软件给力!
  12. 浅层砂过滤器 全自动浅层介质过滤系统
  13. nvme分区选mbr还是guid_老毛桃winpe的DiskGenius分区工具使用说明
  14. 日常生活 - 打印机如何扫描文件到电脑上
  15. 资深架构师推荐 21 本技术好书
  16. matlab 三维颜色,Matlab三维视图颜色控制
  17. UE4-4.26蓝图功能实现:按键控制物体旋转的“延伸”(点名系统Get all actors of class)
  18. 安卓ios和java如何选_在android和iOS之间选择novi编程
  19. 【Linux】红帽子安装过程超详细(学生教学用)
  20. 中文字体设置fontFamily无效

热门文章

  1. 鸿蒙系统magic4.0,Magic UI 4.0正式版
  2. echarts制作多个纵轴的折线图
  3. shell 关闭电脑wifi_笔记本通过命令配置wifi win7系统
  4. 计算机专业英语祈使句,英语祈使句有哪几种结构
  5. HEVC解码器HM源码阅读(一)介绍
  6. 三菱FX5U系列PLC内置模拟量使用方法和输入输出信号接线
  7. robocup3d仿真平台的安装
  8. 定理在数学中的简写形式_初一数学:定义、定理、公式、方法
  9. Tableau 桑基图
  10. python打包程序在win10不能运行、点击无反应_win10双击安装包没反应,win10运行exe无反应...