mysql学习总结(三)

Wesley13
• 阅读 453

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;

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这