MySql入门学习(数据库mysql)
DAY42
今日内容:
正表达式匹配
mysql用户管理
pymysql模块
正则表达式匹配
用到 regexp 关键字
select *from table where name regexp "正则表达式";
mysql用户管理
mysql用户指的是操作前指定的账号和密码,这个账号就是mysql的用户
为什么要管理用户:因为需要给用户设置权限问题
如何管理用户
1. 创建账号:
语法:create user 用户名@"ip地址" identified by "密码";
create user scote@"127.0.0.1" identified by "123";
此处的主机地址 不是服务器地址 而是表示 这个账户可以在那台电脑上登录2. 授权:
语法: grant [权限的名称 select insert.... | all ] on 数据库.表名 to 用户名@主机地址;
with grant option 语句可以使 用户将他有的权限授予别的账户
授权语句执行时如果账号不存在会自动创建账号
注意:默认只有root才能为其他账号授权
例:
grant all on *.* to tom@"localhost" identified by "123";
*.* 表示该用户可以操作任何数据库 任何表 存储在user表grant all on db.* to tom@"localhost" ;
db.* 该用户可以操作db数据库的任何表 存储在 db表grant all on db.t1 to tom@"localhost";
db.* 该用户可以操作db数据库的t1表 存储在 table_privi表精确到字段 和 操作级别
grant select(id) on db.t1 to tom@"localhost" ;
该用户只能查询 db下的t1表 的id权限优先级:
user -> db -> table_priv -> columns_priv
收回权限
语法:revoke 权限的名称 on 数据库.表名 from 用户名@"主机名" ;
例:revoke all on *.* from scote@"localhost";
删除用户
drop user 用户名@"主机地址" ;
刷新权限表
flush privileges;
pymysql模块
python 中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 默认不提交修改 但是注意(指的是对表中记录的操作不提交) 像删库 删表 是无法撤销的import 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) # # 添加数据 # res = cursor.execute("insert into emp values(100,'胡歌','男',30,1,'job',60000)") # if res: # print("插入成功") # else: # print("插入失败") # 提交修改 因为pymysql 模块默认是启用事务的 你的sql语句 如果不提交 相当于没有执行 # conn.commit() # res = cursor.execute("drop database day42") # res = cursor.execute("delete from t1 where id = 1") # print(res) try: cursor.execute("update moneyTable set money = money - 50 where name = '小明'") #如果小花的账户出问题了 无法更新数据 那就需要回滚 cursor.execute("update moneyTable set money = money + 50 where name = '小花'") conn.commit() except: conn.rollback() cursor.close() conn.close() # 小明有100块 准备给小花转50 # update moneyTable set money = money - 50 where name = "小明"; # 发生一些别错误 如果发生了错误 就执行撤销操作 rollback; # update moneyTable set money = money + 50 where name = "小花";
以上为本次学习内容