mysql用户管理

回顾

1.增
insert [into] 表名[(字段名)] values(值1,值2),[(值…)]

delete from 表名 [where条件 ]

update 表名 set 字段 = 新值,[字段2 = 新值2] [where 条件]
2.单表查询
简单查询
select (字段 | * | 四则 | 聚合函数) from 表名
书写顺序是固定的
select distinct * from 表名
where
group by
having
order by
limit
执行顺序
from
where
group by
having
distinct
order by
limit

where === if
四则
>= <= > < = !=
between and
in
not null
and or not
like
regexp

where 10 > any(select age from emp) 当子查询中任意一个结果 < 10 时 条件成立
where 10 > all(select age from emp) 当子查询中所有结果都 < 10 时 条件成立

group by
分组
分组是统计
分组后的组内的记录被隐藏了
只能查看出现在group by 后面的字段
count
max/min
avg
sum

where 不能使用聚合函数 因为数据还没有全部读取 无法统计
一般需要将聚合函数放在having的后面
where与having都是用于条件过滤 区别是执行的时机不同

distinct
当所有字段的值都相同才会去除

order by
根据某个字段排序 默认升序ASC DESC设置为降序

limit a,b
a表示起始位置 不包含a
b查询的条数
用于分页查询

多表查询
on关键字 专门用于连接多表
1.笛卡尔积查询 把两个表连接到一起 表中的每一条记录都与其他表的每条拼接一遍
会产生一堆垃圾数据 需要进行过滤 where 从表的外键 = 主表的主键
2.内连接 [inner] join
内指的是能够匹配上的数据
3.左外连接 left join
左边的完全显示 右边只显示匹配成功的
3.右外连接 right join
右边的完全显示 左边只显示匹配成功的
4.全外连接
左右两边的完全显示
左外连 union 右外连
union 合并查询 会去除重复
union all

子查询
什么是子查询
将一个查询a的结果 作为另一个查询b的条件 a就是子查询 内层查询
什么时候用
当需求复杂 无法一次性获得结果时

子查询的原理
把一个复杂的查询 拆分多个简单的查询
大部分情况下 子查询都可以被连接替代

3.多表查询
4.子查询

今日内容

1.mysql用户管理 ***
数据安全非常重要 不可能随便分配root账户
应该按照不同开发岗位分配不同的账户和权限

mysql中 将于用户相关的数据放在mysql库
user - > db - > tables_priv -> columns_priv
如果用户拥有对所有库的访问权 则存储在 user中
如果用户拥有对部分库的使用权 db
如果用户拥有对部分表的使用权 tables;
如果用户拥有对表中某些字段的使用权 columns_priv中

创建新账户
create user “账户名”@“主机名” identified by 密码
create user “tom”@“localhost” identified by “123”;

授予所有数据库所有表的所有权限给jerry这个用户 并允许jerry在任意一台电脑登录
如果用户不存在会自动创建
grant all on . to “jerry”@"%" identified by “123” with grant option;
with grant option这个用户可以将拥有的权限授予别人

授予day45数据库所有表的所有权限给jack这个用户 并允许jerry在任意一台电脑登录
grant all on day45.* to “jack”@"%" identified by “123”;
授予day45数据库的emp表的所有权限给rose这个用户 并允许jerry在任意一台电脑登录
grant all on day45.emp to “rose”@"%" identified by “123”;
授予day45数据库的emp表的name字段的查询权限给maria这个用户 并允许jerry在任意一台电脑登录
grant select(name) on day45.emp to “maria”@"%" identified by “123”;

收回权限
REVOKE all privileges [column] on db.table from user@“host”;

如何授权就如何收回 因为不同权限信息存到不同的表中
REVOKE all privileges on day45.emp from maria@"%";

立即刷新权限信息
flush privileges;

删除用户
drop user 用户名@主机
drop user maria@%

当你在云服务器部署了 mysql环境时 你的程序无法直接连接到服务器 需要授予在任意一台电脑登录的权限
grant all on . to “jerry”@"%" identified by “123” with grant option;

2.pymysql ****
后期开发中都是用框架代替pymysql

为什么使用pymysql 因为我们需要在程序去连接数据库进行增删改查

3.可视化工具 *****

pymsql学习

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="root",
    database="day47",
    charset="utf8"
)
# cursor 游标对象 负责执行sql语句 获取返回的数据
# pymysql.cursors.DictCursor指定使用字典类型的游标 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor)

sql = "select *from user"

# 返回值是本次查询的记录条数
res = cursor.execute(sql)  #执行sql
print(cursor.fetchall())   # 提取所有结果
# cursor.scroll(1,mode="absolute") # 游标从开始位置往后移动1条记录
# cursor.scroll(1,mode="relative") # 游标从当前位置往后移动1条记录
# print(cursor.fetchone())  # 提取一条记录
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchmany(2)) # 提取指定数量记录

# print(res)

sql注入攻击

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="root",
    database="day47",
    charset="utf8"
)
# cursor 游标对象 负责执行sql语句 获取返回的数据
# pymysql.cursors.DictCursor指定使用字典类型的游标 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor)

name = input("输入用户名:")

pwd = input("输入密码:")


sql = "select *from user where name = %s and password = %s"
res = cursor.execute(sql,(name,pwd))
if res:
    print("登录成功")
else:
    print("登录失败")


# 什么是sql注入攻击 一些了解sql语法的攻击者  可以通过一些特殊符号 来修改 sql执行逻辑 达到绕过验证的效果
# 避免的方式 1.在输入时加上正则判断 不允许输入与sql相关的关键字 这种方式 无法避免 代理服务器发起的攻击
# 2.在服务器端 执行sql前先来一波判断
# pymysql中已经帮你做了处理  只要将参数的拼接交给pymysql来完成就能够避免攻击


增删改

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="root",
    database="day47",
    charset="utf8"
)
# cursor 游标对象 负责执行sql语句 获取返回的数据
# pymysql.cursors.DictCursor指定使用字典类型的游标 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor)

# sql = "insert into user values(null,'中狗子','123')"
sql = "update user set name = '小黄' where name = '中狗子'"
# sql = "delete from user where name = '大狗子'"

res = cursor.execute(sql)
# pymysql不会自动提交  对数据的修改不会持久化 需要手动commit
conn.commit()
print(res)




# 什么阶段使用可视化
# 项目开始前 就应该先设计数据库  如果表很多 就需要使用可视化
# 最好的功能是ER图  可以直观看出 表与表的关系



# 网络编程
# 并发编程
# OOP面向对象
# sql语句 重点查询语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值