zoukankan      html  css  js  c++  java
  • mysql事务索引和权限管理

    pysql:

     sql注入:太相信用户输入的所有的数据。

        解决方法:1.自己手动去判断转义用户输入的数据2.不要拼接SQL语句,使用PyMySQL 的execute方法,防止SQL的注入。

    事务:一组操作,要么都成功要么都失败

      四大特性:

        1.原子性:原子是最小的粒度,所以说一组操作要么都 成功要么都失败

        2.一致性:无论事务前还是事务后,数据的总额不变。

        3.隔离型:事务与事务之间是隔离的,一个事务内的操作,另一个事务是不可见的

        4.持久性:一个事务结束后,其影响应该保留下来,不可修改,只能通过补偿事务来弥补之前的错误

    开启:start transaction

    结束: commit

    回滚:rollback

    但如果在事务内删除了一个表(drop table 表名)那么回滚就不能返回这个表了,其他数据库都一样,但除了oracle(flashback)

    存储引擎:

    create table t1(id int auto_increment primary key, name varchar(16) not null default '')engine=Innodb charset=utf8;

    上面创建表的engine=Innodb 就是引擎

    引擎的分类:

      Inodb:

        1.5.5(含5.5)版本默认就是Innodb

        2.支持事务

        3.支持全文索引

        4.索引和数据都是在同一个文件中,叫.ibd,表的结构在.frm文件中

      MyIsam:

        1.5.5(不含5.5)以下版本默认MyIsam

        2.不支持事务

        3.支持全文索引

        4.表结构:.frm   表数据:.MYD  表索引: .MYI

    全文索引:sphinx

    索引:

    作用:加快查询的速度

    类比:新华字典的目录,可以将索引理解成一个特殊的文件,然后如果没有这个文件的话,查询是从前到后查找数据的,如果有这个文件的话,会按照一种特殊的数据结构(二叉树)查找数据。

    分类:主键索引:加快查询速度,不能重复,不能为空。primary  key

         唯一索引:加快查询速度,不能重复,可以为空。unique(列名)

         联合唯一索引:加快查询速度 ,不能重复,可以为空 unique(列名1,列名2)

    ,普通索引:加快查询   index(列名)

    创建:

    主键索引:

      第一种:

        create table t1(id int auto_increment primary key, name varchar(16) not null default '')engine=Innodb charset=utf8;

      第二种:

        alter table t1 change id id int  auto_increment primary key;

    唯一索引:

      第一种:

        create table t1(id int auto_increment primary key, name varchar(16) not null default '',unique 别名(列名))engine=Innodb charset=utf8;

      第二种:

        create unique index 索引名称(ix_name) on 表名(t1)(列名)

        create unique index 索引名称(ix_name_age) 表名(t1)(name,age)

    普通索引:

      第一种:

        create table t1(id int auto_increment primary key, name varchar(16) not null default '',index ix_name(列名))engine=Innodb charset=utf8;

      第二种:

        create index 索引名称(ix_name) on 表名(t1)(列名)

      删除:

        drop 索引名称(ix_name) on表名(t1);

    场景:使用频繁的列上加一个索引

    索引的缺点:版本5.3以下:删除和修改的速度就变慢了。版本5.5以上:删除和修改的速度不是特别的慢

    索引的使用:

      explain 工具

      查看sql语句是否用得上索引,或者查看sql执行效率的工具

      给执行的sql语句出报告,通过此报告来判断sql语句的执行效率和效果

      ES(elasticsearch)

      sql语句的规则:

          不建议使用like进行搜索

          组合索引最左前缀

          如果组合索引为:(name,email)

             where name and email -- 使用索引

          where name -- 使用索引

          where email -- 不使用索引

    慢日志(slow log):

    日志文件: 记录了执行速度特别慢的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

    普通日志记录(general log):

    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;

    权限管理:

    创建用户:

    create user '用户名'@'IP地址' identified by '密码';
    creaee user 'zekai'@'192.168.1.123' identified by '123qwe';
    creaee user 'zekai'@'192.168.1.%' identified by '123qwe';
    create user 'zekai'@'%' identified by '123qwe';

    删除用户
    drop user '用户名'@'IP地址';
    修改用户
    rename user '用户名'@'IP地址' to '新用户名'@'IP地址';

    修改密码
    set password for '用户名'@'IP地址' = Password('新密码')

    授权:
    grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权

    grant select on db1.* to 'zekai'@'%';
    grant select on *.* to 'zekai'@'%';
    grant select, insert, delete on db1.* to 'zekai'@'%';

    记住:
    flush privileges;


      

        

        

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    基于分布式锁解决定时任务重复问题
    基于Redis的Setnx实现分布式锁
    基于数据库悲观锁的分布式锁
    使用锁解决电商中的超卖
  • 原文地址:https://www.cnblogs.com/xinfan1/p/11040949.html
Copyright © 2011-2022 走看看