事务
原子性 一致性 隔离性 持久性
未提交(Read uncommitted) 1
一个事务就读到另一个事务未提交的数据 脏读
读提交(read committed) 2
一个事务要等另一个事务提交后才能进行读取
可重复读(repeatable read) 3
幻读
和串行化(Serializable) 4 排队
1, 2, 3, 4代表等级
等级越高,效率越低
begin; # 开启事务
操作表格的代码
commit; # 提交事务
rollback; # 事务回滚 (撤销事务)
python与mysql交互
db_config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'qwe123',
'db':'python3',
'charset':'utf8',
}
# 安装pymysql库
# pip install pymysql -i https://pypi.douban.com/simple
# 获取连接对象
conn = pymysql.Connect(**db_config) # host='127.0.0.1',port=3306
# 创建游标对象
cur = conn.cursor()
try:
# sql = 'select * from students'
sql = 'insert into students values("20230110"," qiye666",18,"2023-01-10")'
# 执行sql语句
cur.execute(sql)
except Exception as e:
print(e)
conn.rollback() # 回滚事件
else:
conn.commit() # 提交事件,用连接对象进行调用,插入数据必须要调用
finally:
# 显示一条数据
# print(cur.fetchone()) # 类似next()
# print(cur.fetchmany(5))
cur.close() # 先关闭游标
conn.close() # 最后关闭连接
视图
视图是什么?
视图就是一条查询语句! 是一张虚拟的表
视图只是作为查询使用
无法更新复杂的查询语句
定义视图
create view 视图的名字 as select 语句
查看视图
show tables;
使用视图
select * from 视图的名字
删除视图
drop view 视图的名字
实战:
用类封装 mysql 的查询操作 通过参数控制是否使用多查询!
import pymysql
class MySQLDatabase:
def __init__(self, host, user, password, database):
self.host = host
self.user = user
self.password = password
self.database = database
self.connection = None
def connect(self):
self.connection = pymysql.connect(
host=self.host,
user=self.user,
password=self.password,
database=self.database,
charset='utf8mb4'
)
def close(self):
if self.connection:
self.connection.close()
# 使用multi参数,指的是是否可以使用多条sql语句进行查询,True代表可以,False代表不可以
def execute_query(self, query, multi):
if self.connection is None:
self.connect()
if multi:
cursor = self.connection.cursor()
statements = query.split(";")
multi_result = []
for statement in statements:
trim_statement = statement.strip()
if trim_statement:
cursor.execute(trim_statement + ";")
multi_result.append(cursor.fetchall())
return multi_result
else:
cursor = self.connection.cursor()
cursor.execute(query)
single_result = cursor.fetchall()
return single_result
# 示例使用
if __name__ == "__main__":
db = MySQLDatabase('localhost', 'root', '123456', 'english_word_database')
db.connect()
# 单查询示例
single_query = "SELECT * FROM speaking_and_listening_lesson1_word LIMIT 10"
single_result = db.execute_query(single_query, False)
print("Single Query Result:", single_result)
# 多查询示例
multi_query = """
SELECT * FROM speaking_and_listening_lesson1_word LIMIT 5;
SELECT * FROM speaking_and_listening_lesson2_word LIMIT 5;
"""
multi_result = db.execute_query(multi_query, True)
print("Multi Query Result:", multi_result)
db.close()
Single Query Result: ((1, 'primary-level', '小学教育'), (2, 'secondary-level', '中学教育'), (3, 'tertiary-level', '高等教育'), (4, 'vocational education', '职业教育'), (5, 'vocational training', '职业教育'), (6, "bachelor's degree", '本科学位'), (7, "master's degree", '本科学位'), (8, 'doctoral degree', '本科学位'), (9, 'diploma', '毕业证书'), (10, 'certificate', '技能证书'))
Multi Query Result: [((1, 'primary-level', '小学教育'), (2, 'secondary-level', '中学教育'), (3, 'tertiary-level', '高等教育'), (4, 'vocational education', '职业教育'), (5, 'vocational training', '职业教育')), ((1, 'academic qualifications', '学历'), (2, 'academic performance', '成绩'), (3, 'foreign language skills', '外语技能'), (4, 'communcation skills', '沟通技能'), (5, 'work experience', '工作经验'))]
总结:
以上就是一些关于mysql的事务与交互的使用, 如果有哪里不懂的地方,可以把问题打在评论区, 欢迎大家在评论区交流!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!