• 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;

         

  • 相关阅读:
    手动编译安装nginx
    centoos 安装hadoop集群
    block中如何避免循环引用
    正则表达式
    iOS开发ARC内存管理
    block的内部实现
    Block存储区域
    block的语法
    Collection(数组、字典、集合)
    block捕获自动变量和对象
  • 原文地址:https://www.cnblogs.com/xzcvblogs/p/11041072.html
Copyright © 2020-2023  润新知