|
楼主 |
发表于 2020-3-18 23:55:04
|
显示全部楼层
今天看的是MySQL中的视图、事务和索引
视图是虚拟的表,是通过select查询后返回的结果集
只查询语句执行的结果,不存储具体的数据
作用:操作方便,对于查询操作,减少复杂的SQL语句,增强可读性
事务是不可分隔操作的基本工作单元,要么完全地执行,要么完全地都不执行。
例子:银行转账案例
事务有四大特点
原子性:操作要么全部全部成功提交,要么全部失败回滚
一致性:数据库总是从一个一致性的状态转换到另一个一致 性的状态
隔离性:数据库为每一个用户开启的事务,不能被其他事务 的操作所干扰,多个并发事务之间要相互隔离
持久性:持久性是指一个事务一旦被提交了,那么对数据库 中的数据的改变就是永久性的
索引概念:就是数据库的数据结构,通过索引可以快速查询海量数据
更通俗的说,数据库索引好比是一本书前面的目录,通过缩小数据的查询范围,来实现快速查询的目的
pymysql的使用下面是这几天学习的一个例子 通过pymysql完成数据查询
```python
from pymysql import connect
```
Connection 对象
```python
conn=connect(参数列表)
host:连接的mysql主机,如果本机是'localhost'
port:连接的mysql主机的端口,默认是3306
database:数据库的名称
user:连接的用户名
password:连接的密码
charset:通信采用的编码方式,推荐使用utf8
```
- 关闭连接 `conn.close()`
- 提交数据 `conn.commit()`
- 撤销数据 `conn.rollback()`
- 通过连接获取游标 `cur = conn.cursor()`返回Cursor对象,用于执行sql语句并获得结果
Cursor游标对象
- 获取Cursor对象
```
# 调用Connection对象的cursor()方法
cur =conn.cursor()
```
目的: **执行sql语句**(使用频度最高的语句为select、insert、update、delete)
- 使用游标执行SQL语句
`execute(operation [, parameters ])` 执行SQL语句,**返回受影响的行数**,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句
- 关闭游标 `cur.close()`
- 获取结果集中的一条
`cur.fetchone()`返回一个元组 形如 (1,'妲己',18)
- 获取结果集中的所有
`cur.fetchall()`执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回 形如((1,'公孙离',20),(2,'妲己',18))
### pymysql完成数据查询
```mysql
import pymysql
# 创建和数据库服务器的连接 服务器地址 端口 用户名 密码 数据库名 通信使用字符和数据库字符集一致
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python_test_1', charset='utf8')
# 获取游标
cursor = conn.cursor()
# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sql = """select * from hero;"""
row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)
# 取出结果集中一行 返回的结果是一行 (1, '妲己', 2)
# print(cursor.fetchone())
# 取出结果集中的所有数据 返回 ((一行数据),(),())
# ((1, '妲己', 2), (2, '李白', 1), (3, '程咬金', 3), (4, '亚瑟', 5), (5, '荆轲', 99))
for line in cursor.fetchall():
print(line)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
```
### pymysql完成对数据库的增删改
```python
import pymysql
conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='mysql',db='python_test_1', charset='utf8')
# 通过连接获取游标
cursor = conn.cursor()
# sql = "delete from hero where id = 5;"
# sql = insert into hero (name) values ('西部大坏蛋孙悟空');
sql = "update hero set kongfuid=444 where id = 4;"
row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)
# 提交数据到数据库
# conn.commit()
# 回滚数据到什么都不做的状态 即撤销刚刚的修改
conn.rollback()
# 关闭游标和连接
cursor.close()
conn.close()
```例子是从网上找来练习的 |
|