mysql学习总结(三)
1.SQL注入
1)什么是sql注入:
例如:用户在网页进行登录操作时,输入数据库语句,导致网页的登录限制失效,不需要输入用户名和密码,用户可以输入语句就登录网页
2)出现sql注入的原因:
因为太相信用户的输入,导致我们在接收用户输入的参数的时候,并没有对他进行转义
3)解决sql注入
1.自己手工对用户输入的值进行转义
2.使用pymysql模块中的execute() 自动进行过滤
sql = "select * from t4 where name = %s and pwd = %s"
cursor.execute(sql,(username, pwd))
4)常用pysql函数
execute(sql,(元组)) 插入一条数据
executemany(sql,(元组)) 插入多条数据
rollback()回滚事务,此方法写在异常中,一旦事务发送异常就进行回滚
2.事务
1)什么是事务:
事务是一组操作,要么成功要么失败
2)事务的特性:
原子性:一组操作要么成功,要么都失败
一致性 (Consitency):指事务发生前和发生后,数据的总额依然匹配
隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的
持久性(Durability):当事务完成后,其影响应该保留下来,不能撤销,只能通过另一个事务来抵消之前的错误
3.存储引擎
mysql存储引擎分为三种Innodb,MyIsam,memory
1)Innodb
1.支持事务
2.不支持全文索引
3.索引和数据都是在同一个文件中, .Ibd
表的结构是在.frm文件在中
2)MyIsam
1.不支持事务
2.支持全文索引
3..frm:表结构
.MYD:表数据
.MYI:表索引
3)memory:是mysql引擎中一种特殊的存储引擎,他是把数据全部存放在内存中,每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名与表名相同,类型为frm类型,该文件值存储表结构,而其数据文件都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率.指的注意的是,服务器需要有足够的内存来维持memory存储引擎表的使用,如果不需要,可以直接释放内存,甚至删除不需要的表
注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因 此,基于MEMORY的表的生命周期很短,一般是一次性的。
全文索引(中文): sphinx是用来全局查询的一种插件
4.索引
1)作用:加快查询的速度
2.主键分类
主键索引:加快查询+不能重复+不能为空 primary key
唯一索引:加快查询 + 不能重复 unique(列名)
联合唯一索引:加快查询+不能重复unique(列名1,列名2,...)
普通索引:加快查询 index('列名')
3)场景: 使用频繁的列加上一个索引
4)索引的缺点:
版本5.3以下:
删除和修改的速度就变慢了
版本5.5以上:
删除和修改的速度不是特别的慢
索引的使用:
explain 工具
查看sql语句是否用的上索引, 或者查看sql执行效率的工具
给执行的SQL语句出一个报告, 通过此报告来判断sql语句的执行效率和效果
ES (elasticsearch )
SQL语句的规则:
- 不建议使用 like 进行搜索
- 组合索引最左前缀
如果组合索引为:(name,email)
where name and email -- 使用索引
where name -- 使用索引
where email -- 不使用索引
5.慢日志查询
日志文件:记录了执行速度特别慢的sql语句
开启步骤:
1. show variables like '%query%';
2. set global long_query_time = 1; 设置慢查询的时间
3. slow_query_log = ON
4. slow_query_log_file = E:\program\mysql-5.6.44-winx64\data\oldboy-slow.log
6.普通日志记录
SQL审计 (记录sql的操作语句)
show variables like '%general%';
+------------------+------------------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------------------+
| general_log | ON |
| general_log_file | E:\program\mysql-5.6.44-winx64\data\oldboy.log |
+------------------+------------------------------------------------+
set global general_log = ON;
7.权限管理
1)创建用户:
create user '用户名'@'IP地址' identifed by '密码'
2)删除用户:
drop user '用户名'@'IP地址'
3)修改密码:
set password for '用户名' @ 'IP地址' =password('新密码')
4)授权
grant 权限 on 数据库.表 to '用户' @'IP地址'
注意:在输入以上任何操作都要输入:flush privileges;