数据库05

子查询

  子查询指的是当一条查询语句被当作另一个查询语句的条件时,该查询语句就称之为子查询(内层查询)

  子查询可以将一个大问题拆分为几个小的问题,然后一步一步来查询

  语法:将子查询(内层查询)用括号包裹即可

用户管理

  mysql用户指的是客户端连接服务器时使用账户

  在一些公司中,有很多项目的数据,可能会放在同一个服务器

  那就必须要为每一个用户明确器所用于的权限

  mysql与权限相关的表:

    user columns_priv tables_priv db

    select * from user G; 当一行字段太多可以使用G

  create user 用户名@主机名称 identified by "密码";    该语句只是单纯创建一个用户,后续还要分配权限

  推荐使用grant语句,可以在创建账号的同时分配权限

  grant all on *.* to 用户名@主机名 identified by "密码";

  主机名可以写%  意思是任何主机都可以登录

  库名.*  拥有库下所有表的所有操作权限

  库名.表名   拥有一个表的所有操作权限

  在mysql的权限可以精确到列,但不可以精确到行

  可以将权限授予其他账户

    grant all on *.* to 用户名@主机名 identified by "密码" with grant option;

  收回权限

    revoke all privileges [column] on db.table from user@localhost;

  删除用户

    drop user username@host

  刷新权限

    flush privileges

可视化工具

  navicat

pymysql模块

  pymysql是由mysql提供的模块需要单独下载

  pymysql是python提供的一个mysql客户端模块,用于与mysql服务器建立连接,发送查询获取结果等

  本质上还是一个CS的客户端

    1 连接服务器

    2 发送sql指令给服务器

    3 接收服务器返回的结果

  pymysql.connect 建立一个连接对象

  host 服务器地址  port 端口  user 用户名  password 密码  database 连接的库

  cursor类 游标 默认返回值为元组

  pymysql.cursors.DictCursor  将结果转换为字典

  cursor.fetchall() 提取本次查询的所有结果

  cursor.fetchone() 提取本次查询的一条结果

  cursor.fetchmany() 提取本次查询的指定条数

  cursor.scroll()  通过scroll移动游标位置

    mode参数表示,相当位置relative和绝对位置absolute

  commit 提交修改或建立连接的时候设置autocommit为True指定自动提交修改

  cursor.execute 处理一条数据

  cursor.executemany 处理多条数据

SQL注入问题

  一些不法分子可能会在输入的数据中添加一系列sql语句来跳过认证环节,甚至直接删除数据

  解决方案

    1 在客户端收到数据时做re判断,如果包含sql相关的字符直接报错

    2 在服务器收到某个客户端发送的数据时做一个判断

      pymysql已经封装了相关的判断逻辑

      只要将参数交给pymysql来拼接即可

pymysql使用

  1 用pymysql.connect(参数) 建立连接得到连接对象

  2 通过连接对象拿到游标对象

  3 通过调用游标对象的excute或者excutemany来执行sql

  4 调用游标的fetchone/fetchall/fetchmany相关函数来提前结果

  强调pymysql默认不会提交修改,需要手动调用conn.commit

  

原文地址:https://www.cnblogs.com/LinChengcheng/p/10560475.html