前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql进阶

mysql进阶

作者头像
不断折腾
发布2019-09-23 10:46:12
7460
发布2019-09-23 10:46:12
举报

python与mysql的交互

在python中,我们要完成与mysql的交互需要用到pymysql模块。

在python2中,用到的是MySQLdb

安装该模块:pip3 install pymysql

数据准备:

还是和上次的数据库一样,链接:Mysql查询集合

python中操作mysql

基本流程:

1、创建一个connection对象

2、通过connection创建一个游标对象(cursor)

3、通过游标对象(cursor)来执行sql语句

4、关闭cursor

5、关闭connection

查询实例:

# 导入模块

from pymysql import *

# 创建一个connection链接

conn=connect(host='localhost',port=3306,user='root',password='123456',database='student',charset='utf8')

# host:localhost表示本地,127.0.0.1也表示本地。两者都一样。挑一个。

# port:端口,mysql的端口

# user:用户名

# passsword:密码

# database:数据库名

# charset:编码格式

# 利用connection创建一个游标,用来接收返回的数据

cursor = conn.cursor()

# 执行SQL语句

count = cursor.execute('select *from studentinfo')

# 输出count,count为受影响行数

print(count)

# 一下显示全部数据

#print(cursor.fetchall())

# 显示一行

#print(cursor.fetchone())

# 再调用一次取一行数据会取第二行

# 显示三行数据

print(cursor.fetchmany(3))

# 关闭游标

cursor.close()

# 关闭connection

conn.close()

注意:如果全取出来之后就没有数据了。

增删改实例:

from pymysql import *

conn=connect(host='localhost',port=3306,user='root',password='123456',database='student',charset='utf8')

cursor = conn.cursor()

# 增加sql语句

insertcount = cursor.execute("insert into studentinfo values(0,'赵六',1,'男',26,'天津',0)")

# 删除sql语句

#deletecount = cursor.execute("delete from studentinfo where studentid=5")

# 修改

#updatecount = cursor.execute("update studentinfo set studentage=23 where studentid=1")

# 执行到数据库

conn.commit()

cursor.close()

conn.close()

mysql视图

视图是什么?

视图是一条select语句执行后返回的结果集,所以创建视图最主要的是就是select语句。

视图是对1或多个表的引用,是一张虚表,来查询查询语句执行的结果。

比如我们创建一个视图:

语法:create view 名字 as 查询语句

create view v_stu_cla as select s.*,c.classname from studentinfo as s inner join classinfo as c on s.classid = c.classid;

我们show tables;一下

会看到多出来一张表:v_stu_cla

我们select * from v_stu_cla 一下就会显示我们创建视图后面的查询语句查询出来的结果

更加方便了我们查数据,视图主要用于查数据。不可用于修改,删除,增加。

删除视图:drop view 视图名;

视图的作用:

1、提高查询语句的重用性

2、对数据重构

3、提高安全性(不能修改,等其他删除)

4、数据更加清晰

事务

什么是事务?

他是一个操作序列,要么都执行,要么都不执行

为什么这样设置?

比如我们在转账的时候,一个转,另一个收,是需要同时进行的。

不能存在一个减了另一个没有增加。

流程:

1、开启事务

2、执行sql的增,删,改。

3、全部都成功commit

4、有一个不成功事务回滚rollback

事务的四大特性(简称ACID)

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

原子性:不可分割

一致性:最后的结果是一样的,如果出错,将不会进行任何操作

隔离性:比如当我们修改金额减去200时,增加的sql语句还没有之行时,修改的数据放在缓存中,是不会做出修改操作的。

持久性:事务一旦提交,便会保存到数据库中。

开启一个事务:

begin;

或者

start transaction;

提交事务:

commit;

回滚事务:

rollback;

索引

什么是索引?

索引是一种特使的文件,它包含了对数据库表里所有记录的引用指针。

像一本书的目录,帮助我们更快的找到数据。

索引的目的

提高查询效率

创建一个索引

create index name_index on studentinfo(studentname(20));

create index:创建索引关键字

name_index:索引名字

on:关键字

studentinfo:表的名字

studentname:字段的名字

20:我们创建的时候给的类型是varchar(20),这里就写20,如果是int类型,就不用写。

如何看执行的时间?

开启计时:

set profiling=1;

执行sql语句;

查看执行的时间:

show profiles;

查看索引:

show index from 表名;

另:主键,外键 都是一种索引。

删除索引:

drop index 索引名称 on 表名;

权限管理

目前我们的mysql只有一个账户root,也就是所有的权限都有,有些员工,是不允许有删除的操作的。保证数据的安全性。root是最高权限的。

设置权限在mysql这个数据库中

进入mysql数据库:

use mysql;

看一下表:

show tables;

有一个user表:

看一下表结构desc user;

查看一下表中数据:

select user,host from user;

如果你是没有创建其他的用户,只有root。

host表示可以在哪个地方登陆,%表示任意地方,localhostbendi登陆。

查看密码:

select user,host,authentication_string from user;

密码都是经过加密的。

创建一个用户,给与其权限:

我们创建一个zhangsan用户,密码为123456,只能通过本地访问,只能对student数据库曹志勇,只能select(读)操作。

首先用过root登陆。

创建用户给与权限:

grant select on student.* to 'zhangsan'@'localhost' identified by '123456';

想要给其他权限在select后用,隔开,写上insert等其他。

grant :关键字

select :查询(读)的权限

on:关键字

student.*:student下的所有表

to:关键字

zhangsan:用户名

@:关键字

localhost:允许本地登陆

identified by:关键字

123456:密码

这样就添加上了。

如果想要给与他正删改查的权限:

grant all privileges on student.* to 'zhangsan'@'%' identified by '123456';

all privileges :所有权限

%:表示任意地方都可以登录

修改权限

grant 权限名称 on 数据库 to 账户@登陆地方 with grant option;

例如:给张三添加一个insert的权限:

grant select,insert on student.* to 'zhangsan'@'localhost' with grant option;

flush privileges;

flush privileges:刷新权限就可以了。

修改密码

需要用root用户登陆来修改mysql数据库中的user表

update user set authentication_string=password('新密码') where user = '用户名';

例如:

update user set authentication_string=password('123') where user = 'zhangsan';

修改完之后也需要刷洗:

flush privileges;

password():加密

删除用户:

drop user '用户名'@'主机'

远程连接

mysql -u用户名 -p密码 -hip地址

例如:

mysql -uroot -p123456 -h192.168.1.1

或者 mysql -h192.168.1.1 -uroot -p

然后输入密码进入

但是root用户一般都是本地登陆,因为root的用户名大家都知道,密码可以试出来,万一试出来就完了,修改root的登陆地址修改文件:

需要把mysql中的mysqld.cnf中的 bind-address -127.0.0.1注释掉。虽然方便了,但是没有了安全性。

mysql的主从

主从的意思是一个主数据库,1个或多个从数据库,从数据库是对主数据库的备份。

主从数据库是同步的,当一个修改,另一个也会变。

主从数据库的好处:

1、读写分明,可以用主数据库来进行增删改,从数据库用来查询。

2、数据的备份

3、负载均衡

配置主从的流程

1、首先备份主数据库中的数据。让从数据库和主数据库的数据一致。

密令:mysqldump -uroot -p123456 数据库名 > student.sql;

就会导出一份该数据库的所有sql。

注意:我们一般在导出数据的时候,都是全部导出,并且只允许查询操作:

mysqldump -uroot -p123456 --all-databases --lock-all-table >~/master_db.sql;

~/master_db.sql:存放的文件路径,可以自己写。

--lock-all-table:锁住所有的表

--all-databases:所有的数据库

2、恢复

执行:mysql -u用户名 -p密码 新的数据库名字 < student.sql;

如果是所有数据库都导出:就不需要写数据库的名字。

以上达到了数据都相同。

3、配置主服务器

打开mysql中的mysqld.cnf文件,保证server - id和log_bin没有被注释掉。

4、重启主服务器的mysql服务

5、配置从服务器

在主服务器中server-id的值为1,同样打开从服务器的mysqld.cnf文件,保证server-id不与主服务器

的值相同,一般情况用ip地址的最后一位,将从服务器的log_bin注释掉。

5、重启从服务器的mysql服务

6、在主服务齐全中创建一个用户给从服务器用

grant replication slave on *.* to 'ss'@'%' identified by '111'

*.*:表示所有数据库,所有表。

flish privileges;

刷新权限。

7、链接两个服务器

在从服务器中执行:change master to master_host = '主服务器ip地址',master_user = 'ss',master_password='111',master_log_file='',master_log_pos=;

还有两个参数没有给值:

这两个参数来自主服务器,怎么查看?

在主服务器上登陆mysql,

执行:show master status;

可以看到其中有file字段和position字段,

master_log_file的字段就填写file字段中的内容,

master_log_pos的字典填写position地段中的内容。

8、查看是否成功

在从服务器中登陆,执行:show slave status;

查看到Slave_IO_Runing的值为Yes,和

Slave_SQL_Runing的值也为Yes,说明我们配置成功了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档