Python Day44

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:\program\mysql-5.6.44-winx64\data\oldboy-slow.log

普通日志记录(general log):

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;

权限管理:

创建用户:

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;


  

    

    

猜你喜欢

转载自www.cnblogs.com/xinfan1/p/11040949.html