子查询
将一个查询的结果作为下一次查询的条件或原数据(又称内查询)
当你的需求一次查询无法满足需求时(一次select找不到你要的数据)就要用到子查询
子查询能干的是,多表联查也能干
正则表达式匹配
关键字 regexp
select *from emp where name like "刘%"
select *from emp where name regxp "司.*光$";
mysql用户管理
mysql是一个tcp服务器 用于操作服务器上的文件数据,
接受用户端发送的指令,接受指令时需要考虑安全问题
mysql把文件称为表
在mysql自带的mysql数据库中有4个表用于用户管理
分别是:优先级从高到低
user ->db ->tables_priv -> columns_priv
create user 用户名@"主机地址" identified by "密码"; create user scote@"127.0.0.1" identified by "123"; 此处的主机地址 不是服务器地址 而是表示 这个账户可以在那台电脑上登录
语法: grant [权限的名称 select insert.... | all ] on 数据库.表名 to 用户名@主机地址; # 授予 scote 这个用户所有权限 在所有数据库所有表中 grant all on *.* to scote@"localhost"; 可以访问 所有库和表 grant all on day41.* to scote@"localhost"; 可以访问day41库的所有表 grant all on day41.stu to scote@"localhost"; 可以访问day41库的stu表 grant select(id,name),insert(id,name) on day41.stu to scote@"localhost"; 仅能查看和添加 day41库的stu表中的 id和name字段 grant all on mydb1.* to testDBA@"%" identified by "123"; 3.grant [权限的名称 select insert.... | all ] on 数据库.表名 to 用户名@主机地址 with grant option; with grant option 这个用户可以将他有的权限授予别的账户 特点: 如果授权时 用户不存在 直接自动创建用户
revoke 权限的名称 on 数据库.表名 from 用户名@"主机名" ; revoke all on *.* from scote@"localhost"; update mysql.user set Grant_priv = "N" where user ="scote" and host = "localhost"; *.刷新权限表 flush privileges;
drop user 用户名@"主机地址";
import pymysql """pymysql使用步骤 核心类 Connect链接用 和Cursor读写用 1.与数据库服务器建立链接 2.获取游标对象 (用于发送和接收数据) 3.用游标执行sql语句 4.使用fetch方法来获取执行的结果 5.关闭链接 先关游标 再关链接 游标的常用方法 1.创建游标 conn.cursor(指定查询结果的数据类型) 2.excute 执行sql 3.fetchone(当sql只有一条记录时) many(sql有多条并且需要指定条数) all(多条) 4.scroll 用于修改游标的当前位置 注意: pymysql 默认不提交修改 但是注意(指的是对表中记录的操作不提交) 像删库 删表 是无法撤销的 """ # 创建链接得到一个链接对象 conn = pymysql.Connect( host="127.0.0.1", # 数据库服务器主机地址 user="root", # 用户名 password="admin", # 密码 database="day42", #数据库名称 port=3306, # 端口号 可选 整型 charset="utf8" # 编码 可选 ) # 获取游标对象 pymysql.cursors.DictCursor指定 返回的结果类型 为字典 默认是元祖类型 cursor = conn.cursor(pymysql.cursors.DictCursor) # 查询数据 sql = "select *from emp" # 执行sql 如果是select 语句返回的是 查询的条数 res = cursor.execute(sql) print(res) # 获取查询的结果 # print(cursor.fetchall()) # print(cursor.fetchone()) # print(cursor.fetchone()) # print(cursor.fetchmany(1)) # print(cursor.fetchall()) # scroll print(cursor.fetchone()) cursor.scroll(-1) print(cursor.fetchall()) # 关闭链接 cursor.close() conn.close()
commit 提交修改
因为pymysql模块默认是启用事务的,sql语句如果不提交 相当于没有执行
roback 回滚,撤销数据修改