sg11 mysql7.1_MySQL 7

本文介绍了数据库管理中的关键概念,包括存储过程中的事务支持,如何使用sql游标,以及动态执行SQL以防止SQL注入。讨论了索引的重要性和不同类型的索引,如主键索引、唯一索引和联合索引,并举例说明了它们对查询速度的影响。此外,还提到了ORM框架如sqlalchemy如何简化SQL操作。文章强调了优化查询的策略,如避免全表扫描和使用合适的索引,以及在使用ORM时的注意事项。
摘要由CSDN通过智能技术生成

- 存储过程补充

- 支持事务

在存储过程的代码块中,可以写事务,比如出错了,回滚到改变前的状态

- sql游标

- 不常用

- 在什么情况才使用:需要对表中的数据行与另一列的行的数据进行操作时需要使用

- 动态执行sql(防止sql注入)

delimiter //

create produce p(

in sql varchar(10)

in arg int )

begin

--代码逻辑

1 预测 sql语句是否合法

2 sql语句格式化

3 执行sql语句

end

delimiter ;

现在放sql注入就有两种方法了

- pymysql 语句传参数

- 存储过程的代码快实现

- 索引

- 作用

- 约束

- 加速查找

- 事例

-1 select * from table 字段=value

-2 select * from table id=value (id是主键)

1语句和2语句的速度会天差地别,2远远快于1,为什么呢?建立索引的时候就相当于是帮一本书建立了一个目录,主键就是目录,这时候要查找内容,直接输入目录就可以找到迷路对应的内容了,语句1就相当于是去一个没有目录的书里面去查找某个内容

当建立索引的时候其实额外创建了一张映射,key是索引,value是表数据行。

- 索引种类

- hash索引

- 特点:

- 查询个值快

- 范围查找就慢了,因为他要一个一个的寻找

- btree

- 技术栈

二叉树查找

- 分类

- 普通索引

- 主键索引

- 唯一索引

- 联合索引

- 无法命中索引的情况(此时的查询速度会慢一截)

- 类型不一致时

select nid from table where id=‘12’;

nid定义时如果是整形,那where关键字后的12就不要加括号。

- !=

不等号除主键意外的字段会无法命中索引

- order by

前后字段不一致无法命中索引

select name from table limit 0,10 order by gender;

name字段和gender不一致

- 其他注意

- 避免使用 select *

- 使用char代替varchar

- count(1),count(字段)代替count(*)

- 增删改查操作优先使用固定长度的字段

- 尽量使用短索引

- 链表操作注意字段类型一致(表结构)

- 预测

- 可以预测sql语句的执行时间

- 日志

- 执行时间超出某个范围的

- 未命中索引的

-

-需要配置

- 分页

- 普通

select * from table limit 0,10;

效率不高,因为当基础页特别大的时候,会几近于全表扫描,速度会慢下来

- 提高效率方案

- 做标记

不要进行全表扫描即可,比如我现在处于1000,10的页码,我将1000这个页码记录下来,下次就从这儿开始查起

max_id

min_id

- 上一页

select * from table where id>1010 limit 10;

- 下一页

select * from table where id<990 limit 10;

- orm框架 sqlalchemy

- 对sql语句使用类封装,就是建立起映射,以后就不用写sql语句了,写类就可以了。相比于pymysql,封装地更高级

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值