MySQL
回顾
a)单表的查询
简单(去重distinct)
条件:比较、 逻辑 、模糊、范围、空判断
聚合:sum max min avg count
分组:分组的特点*****
Select gender,sum(age) from students group by gender;
这样是可以的,不可以单独选择age,但是可以对其它字段聚合
排序:正序 倒序
限制:索引 数量
b)关系表(关联表)的创建和查询
关系是什么
关系怎么去表示(引用主键)
关系字段的约束(外键约束)
关系表的查询(子查询,连接查询)
自关联
导入外部表数据
1、先把外部表sql文件拖到桌面上
2、在桌面上重新进入mysql
3、在选择的数据库当中新建表,表名和sql文件名字一致
create table areas(
id int primary key auto_increment not null,
atitle varchar(30),
pid int, foreign key(pid) references areas(id));
4、在mysql中输入命令:source 文件名.sql
自关联表的查询
查询某个省的所有市还有区县
select sheng.atitle as shengname,shi.atitle as shiname,qu.atitle as quname from areas as sheng inner join areas as shi on sheng.id = shi.pid inner join areas as qu on shi.id = qu.pid where sheng.atitle = '甘肃省';
查询某个省的所有市
select sheng.atitle as shengname,shi.atitle as shiname from areas as sheng inner join areas as shi on sheng.id = shi.pid where sheng.atitle = '河北省';
视图
什么是视图
本质上就是对sql查询语句的封装
为什么要使用视图
对于复杂的查询语句维护起来不方便
从不同的角度有不同的数据形式
视图的特性
视图本身并没有确切的数据,它的数据来源于定义查询语句时候的基本表。
(*****当基本表数据发生改变的时候,调用视图所得的结果也会改变)
查看视图 show tables;
创建视图 create view [视图名字] as [查询语句 ]
create view v_areas as select sheng.atitle as shengname,shi.atitle as shiname,qu.atitle as quname from areas as sheng inner join areas as shi on sheng.id = shi.pid inner join areas as qu on shi.id = qu.pid where sheng.atitle = '北京市';
修改视图 alter view [视图名字] as [查询语句]
修改视图的名字:rename view [旧名] to [新名]
删除视图 drop view [视图名字]
索引
本质是一种算法,优化查询
查看索引 show index from areas
创建索引 create index [indexname] on areas(atitle)
删除索引 drop index [indexname] on [tablename]
修改索引:先删除再添加
查看添加索引后的效率
1)Set profiling = 1 开启运行时间检测
2)在大数据量表中查询有管信息
3) show profiles; 查看时间
事务
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。使用事务可以保证一个复杂业务逻辑的完整性和正确性
mysql支持innodb引擎
事务的操作
1、开启事务 begin
2、执行业务逻辑sql
3、选择提交或者回退 commit | rollback
数据库与Python进行交互
Python当中可以与数据库进行交互,但是要想去连接数据库需要安装对应版本的驱动包,Python2要安装MySQLdb,Python3需要安装PyMysql,使用方式基本一致
驱动包的安装 pip3 install pymysql
如果没有安装pip3,先进行安装pip3 sudo apt-get install python3-pip
闭包
#encoding=utf-8
# __Author__ : weesmile
# __time__ : 18-5-28 下午4:47
from pymysql import connect
class MysqlHelper(object):
def __init__(self,host,port,user,password,db,charset):
self.host = host
self.port = port
self.user = user
self.password = password
self.db = db
self.charset = charset
def open(self):
self.conn = connect(host=self.host,port=self.port,user=self.user,password=self.password,db=self.db,charset=self.charset)
self.cur = self.conn.cursor()
def close(self):
self.cur.close()
self.conn.close()
def cud(self,sql,params=[]):
self.open()
self.cur.execute(sql,params)
self.conn.commit()
self.close()
def get_one(self,sql,params=[]):
self.open()
self.cur.execute(sql,params)
result = self.cur.fetchone()
self.close()
return result
def get_all(self,sql,params=[]):
self.open()
self.cur.execute(sql, params)
result = self.cur.fetchall()
self.close()
return result
def main():
helper = MysqlHelper('localhost',3306,'root','root','test2','utf8')
sql = 'select * from students'
a =helper.get_all(sql)
print(a)
if __name__ == '__main__':
main()
回顾
a)单表的查询
简单(去重distinct)
条件:比较、 逻辑 、模糊、范围、空判断
聚合:sum max min avg count
分组:分组的特点*****
Select gender,sum(age) from students group by gender;
这样是可以的,不可以单独选择age,但是可以对其它字段聚合
排序:正序 倒序
限制:索引 数量
b)关系表(关联表)的创建和查询
关系是什么
关系怎么去表示(引用主键)
关系字段的约束(外键约束)
关系表的查询(子查询,连接查询)
自关联
导入外部表数据
1、先把外部表sql文件拖到桌面上
2、在桌面上重新进入mysql
3、在选择的数据库当中新建表,表名和sql文件名字一致
create table areas(
id int primary key auto_increment not null,
atitle varchar(30),
pid int, foreign key(pid) references areas(id));
4、在mysql中输入命令:source 文件名.sql
自关联表的查询
查询某个省的所有市还有区县
select sheng.atitle as shengname,shi.atitle as shiname,qu.atitle as quname from areas as sheng inner join areas as shi on sheng.id = shi.pid inner join areas as qu on shi.id = qu.pid where sheng.atitle = '甘肃省';
查询某个省的所有市
select sheng.atitle as shengname,shi.atitle as shiname from areas as sheng inner join areas as shi on sheng.id = shi.pid where sheng.atitle = '河北省';
视图
什么是视图
本质上就是对sql查询语句的封装
为什么要使用视图
对于复杂的查询语句维护起来不方便
从不同的角度有不同的数据形式
视图的特性
视图本身并没有确切的数据,它的数据来源于定义查询语句时候的基本表。
(*****当基本表数据发生改变的时候,调用视图所得的结果也会改变)
查看视图 show tables;
创建视图 create view [视图名字] as [查询语句 ]
create view v_areas as select sheng.atitle as shengname,shi.atitle as shiname,qu.atitle as quname from areas as sheng inner join areas as shi on sheng.id = shi.pid inner join areas as qu on shi.id = qu.pid where sheng.atitle = '北京市';
修改视图 alter view [视图名字] as [查询语句]
修改视图的名字:rename view [旧名] to [新名]
删除视图 drop view [视图名字]
索引
本质是一种算法,优化查询
查看索引 show index from areas
创建索引 create index [indexname] on areas(atitle)
删除索引 drop index [indexname] on [tablename]
修改索引:先删除再添加
查看添加索引后的效率
1)Set profiling = 1 开启运行时间检测
2)在大数据量表中查询有管信息
3) show profiles; 查看时间
事务
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。使用事务可以保证一个复杂业务逻辑的完整性和正确性
mysql支持innodb引擎
事务的操作
1、开启事务 begin
2、执行业务逻辑sql
3、选择提交或者回退 commit | rollback
数据库与Python进行交互
Python当中可以与数据库进行交互,但是要想去连接数据库需要安装对应版本的驱动包,Python2要安装MySQLdb,Python3需要安装PyMysql,使用方式基本一致
驱动包的安装 pip3 install pymysql
如果没有安装pip3,先进行安装pip3 sudo apt-get install python3-pip
闭包
#encoding=utf-8
# __Author__ : weesmile
# __time__ : 18-5-28 下午4:47
from pymysql import connect
class MysqlHelper(object):
def __init__(self,host,port,user,password,db,charset):
self.host = host
self.port = port
self.user = user
self.password = password
self.db = db
self.charset = charset
def open(self):
self.conn = connect(host=self.host,port=self.port,user=self.user,password=self.password,db=self.db,charset=self.charset)
self.cur = self.conn.cursor()
def close(self):
self.cur.close()
self.conn.close()
def cud(self,sql,params=[]):
self.open()
self.cur.execute(sql,params)
self.conn.commit()
self.close()
def get_one(self,sql,params=[]):
self.open()
self.cur.execute(sql,params)
result = self.cur.fetchone()
self.close()
return result
def get_all(self,sql,params=[]):
self.open()
self.cur.execute(sql, params)
result = self.cur.fetchall()
self.close()
return result
def main():
helper = MysqlHelper('localhost',3306,'root','root','test2','utf8')
sql = 'select * from students'
a =helper.get_all(sql)
print(a)
if __name__ == '__main__':
main()