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:programmysql-5.6.44-winx64dataoldboy-slow.log

6.普通日志记录

         SQL审计 (记录sql的操作语句)


        show variables like '%general%';
        +------------------+------------------------------------------------+
        | Variable_name | Value |
        +------------------+------------------------------------------------+
        | general_log | ON |
        | general_log_file | E:programmysql-5.6.44-winx64dataoldboy.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;

     

原文地址:https://www.cnblogs.com/xzcvblogs/p/11041072.html