python操作mysql

python操作mysql

一、MySQL数据库的基本使用

1.数据库

数据库的介绍

数据库就是存储和管理数据的仓库,数据按照一定的格式进行存储,用户可以对数据库中的数据进行增加、修改、删除、查询等操作。

数据库的分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库的作用

在这里插入图片描述

数据库的特点

在这里插入图片描述

小结

在这里插入图片描述

2.关系型数据库管理系统

关系型数据库管理系统的介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SQL的介绍

在这里插入图片描述

小结

在这里插入图片描述

3.MySQL数据库

MySQL数据库的介绍

在这里插入图片描述

MySQL数据库的安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

4.数据类型和约束

数据类型

在这里插入图片描述

数据约束

在这里插入图片描述

数据类型附录表

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

5.命令行客户端MySQL的使用

登录和登出数据库

在这里插入图片描述
在这里插入图片描述

数据库操作的SQL语句

在这里插入图片描述
在这里插入图片描述

表结构操作的SQL语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

表数据操作的SQL语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

6.as和distinct关键字

as关键字

在这里插入图片描述

distinct关键字

在这里插入图片描述

小结

在这里插入图片描述

7.where条件查询

where条件查询的介绍

在这里插入图片描述

比较运算符查询

在这里插入图片描述

逻辑运算符查询

在这里插入图片描述

模糊查询

在这里插入图片描述

范围查询

在这里插入图片描述

空判断查询

在这里插入图片描述

小结

在这里插入图片描述

8.排序

排序查询语法

在这里插入图片描述

小结

在这里插入图片描述

9.分页查询

分页查询的介绍

当我们在京东购物,浏览商品列表的时候,由于数据特别多,一页显示不完,一页一页的进行显示,这就是分页查询

分页查询的语法

在这里插入图片描述

分页查询案例

在这里插入图片描述

小结

在这里插入图片描述

二、MySQL数据库的条件查询

1.聚合函数

聚合函数的介绍

在这里插入图片描述

求总行数

在这里插入图片描述

求最大值

在这里插入图片描述

求最小值

在这里插入图片描述

求和

在这里插入图片描述

求平均值

在这里插入图片描述

聚合函数的特点

聚合函数默认忽略字段为null的记录 要想列值为null的记录也参与计算,必须使用ifnull函数对null值做替换。

小结

在这里插入图片描述

2.分组查询

分组查询介绍

在这里插入图片描述

group by的使用

在这里插入图片描述

group by + group_concat()的使用

在这里插入图片描述

group by + 聚合函数的使用

在这里插入图片描述

group by + having的使用

在这里插入图片描述

group by + with rollup的使用

在这里插入图片描述

小结

在这里插入图片描述

3.连接查询-内连接

连接查询的介绍

在这里插入图片描述

内连接查询

在这里插入图片描述

小结

在这里插入图片描述

4.连接查询-左连接

左连接查询

在这里插入图片描述

小结

在这里插入图片描述

5.连接查询-右连接

右连接查询

在这里插入图片描述

小结

在这里插入图片描述

6.连接查询-自连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select c.id, c.title, c.pid, p.title from areas as c inner join areas as p on c.pid = p.id where p.title = '山西省';

在这里插入图片描述

7.子查询

子查询的介绍

在这里插入图片描述

子查询的使用

在这里插入图片描述

小结

子查询是一个完整的SQL语句,子查询被嵌入到一对小括号里面

8.数据库设计之三范式

数据库设计之三范式的介绍

在这里插入图片描述

第一范式的介绍

在这里插入图片描述

第二范式的介绍

在这里插入图片描述

第三范式的介绍

在这里插入图片描述

E-R模型的介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

9.外键SQL语句的编写

外键约束作用

外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性

对于已经存在的字段添加外键约束

在这里插入图片描述

在创建数据表时设置外键约束

在这里插入图片描述

删除外键约束

在这里插入图片描述

小结

在这里插入图片描述

10.演练-分组和聚合函数的组合使用

数据准备
-- 创建 "京东" 数据库
create database jing_dong charset=utf8;

-- 使用 "京东" 数据库
use jing_dong;

-- 创建一个商品goods数据表
create table goods(
    id int unsigned primary key auto_increment not null,
    name varchar(150) not null,
    cate_name varchar(40) not null,
    brand_name varchar(40) not null,
    price decimal(10,3) not null default 0,
    is_show bit not null default 1,
    is_saleoff bit not null default 0
);

-- 向goods表中插入数据

insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default); 
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default); 
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default); 
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default); 
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default); 
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default); 
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default); 
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default); 
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);

在这里插入图片描述

SQL语句演练

在这里插入图片描述
在这里插入图片描述

三、MySQL数据库的高级使用

1.将查询结果插入到其它表中

思考

在这里插入图片描述

创建商品分类表

在这里插入图片描述

把goods表中的商品分类添加到商品分类表

在这里插入图片描述

小结

想要完成表复制可以使用: insert into … select … SQL语句

2.使用连接更新表中某个字段数据

更新goods表中的商品分类信息

在这里插入图片描述

小结

连接更新表中数据使用: update … join … 语句

3.创建表并给某个字段添加数据

思考

在这里插入图片描述

创建品牌表

在这里插入图片描述

更新goods表中的品牌信息

在这里插入图片描述

小结

创建表并给字段插入数据使用: create table … select 语句

4.修改goods表结构

在这里插入图片描述

5.事务

事务的介绍

在这里插入图片描述

事务的四大特性

在这里插入图片描述

事务的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
事务演练的SQL语句:

begin;
insert into students(name) values('李白');
-- 查询数据,此时有新增的数据, 注意: 如果这里后续没有执行提交事务操作,那么数据是没有真正的更新到物理表中
select * from students;
-- 只有这里提交事务,才把数据真正插入到物理表中
commit;

-- 新打开一个终端,重新连接MySQL数据库,查询students表,这时没有显示新增的数据,说明之前的事务没有提交,这就是事务的隔离性
-- 一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的
select * from students;
小结

在这里插入图片描述

6.索引

索引的介绍

在这里插入图片描述

索引的使用

在这里插入图片描述
在这里插入图片描述

案例-验证索引查询性能

在这里插入图片描述

from pymysql import connect

def main():
    # 创建Connection连接
    conn = connect(host='localhost',port=3306,database='python',user='root',password='mysql',charset='utf8')
    # 获得Cursor对象
    cursor = conn.cursor()
    # 插入10万次数据
    for i in range(100000):
        cursor.execute("insert into test_index values('ha-%d')" % i)
    # 提交数据
    conn.commit()

if __name__ == "__main__":
    main()

在这里插入图片描述

联合索引

在这里插入图片描述

联合索引的最左原则

在这里插入图片描述

MySQL中索引的优点和缺点和使用原则

在这里插入图片描述

小结

在这里插入图片描述

7.PyMySQL的使用

思考

在这里插入图片描述

Python程序操作MySQL数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
pymysql完成数据的查询操作

import pymysql

# 创建连接对象
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python', charset='utf8')

# 获取游标对象
cursor = conn.cursor()

# 查询 SQL 语句
sql = "select * from students;"
# 执行 SQL 语句 返回值就是 SQL 语句在执行过程中影响的行数
row_count = cursor.execute(sql)
print("SQL 语句执行影响的行数%d" % row_count)

# 取出结果集中一行数据, 例如:(1, '张三')
# print(cursor.fetchone())

# 取出结果集中的所有数据, 例如:((1, '张三'), (2, '李四'), (3, '王五'))
for line in cursor.fetchall():
    print(line)

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

pymysql完成对数据的增删改

import pymysql

# 创建连接对象
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python', charset='utf8')

# 获取游标对象
cursor = conn.cursor()

try:
    # 添加 SQL 语句
    # sql = "insert into students(name) values('刘璐'), ('王美丽');"
    # 删除 SQ L语句
    # sql = "delete from students where id = 5;"
    # 修改 SQL 语句
    sql = "update students set name = '王铁蛋' where id = 6;"
    # 执行 SQL 语句
    row_count = cursor.execute(sql)
    print("SQL 语句执行影响的行数%d" % row_count)
    # 提交数据到数据库
    conn.commit()
except Exception as e:
    # 回滚数据, 即撤销刚刚的SQL语句操作
    conn.rollback()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

在这里插入图片描述

from pymysql import connect

def main():

    find_name = input("请输入物品名称:")

    # 创建Connection连接
    conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
    # 获得Cursor对象
    cs1 = conn.cursor()

    # 非安全的方式
    # 输入 ' or 1 = 1 or '   (单引号也要输入)
    # sql = "select * from goods where name='%s'" % find_name
    # print("""sql===>%s<====""" % sql)
    # # 执行select语句,并返回受影响的行数:查询所有数据
    # count = cs1.execute(sql)

    # 安全的方式
    # 构造参数列表
    params = [find_name]
    # 执行select语句,并返回受影响的行数:查询所有数据
    count = cs1.execute("select * from goods where name=%s", params)
    # 注意:
    # 如果要是有多个参数,需要进行参数化
    # 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可
    # %s 不需要带引号

    # 打印受影响的行数
    print(count)
    # 获取查询的结果
    # result = cs1.fetchone()
    result = cs1.fetchall()
    # 打印查询的结果
    print(result)
    # 关闭Cursor对象
    cs1.close()
    # 关闭Connection对象
    conn.close()

if __name__ == '__main__':
    main()

在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值