阶段一、mysql事务
主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert、update、delete 语句
事务必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
start transaction; # 开启事务 # 插入数据 insert into account value(1, 1000); commit; # 提交事务 rollback; # 回滚
阶段二、python操作mysql
pip install pymysql pip install redis workon py3env cd /etc/mysql/mysql.conf.d/ sudo vim mysqld.cnf 0.0.0.0 # 所有的ip都能访问 127.0.0.1 # 只有本地能访问 cd /etc/redis/ sudo vim redis.conf 虚拟机解释器不需要改端口,直接填 3306 6379 # 要操作数据库,首先就要建立和数据库的连接,配置pymysql.connect连接数据库: con = pymysql.connect( host = '主机', port = 端口, user = '用户名', password = '密码', db = '数据库名', charset = 'utf8' ) print(con) # 定义游标 cursor = con.cursor() cursor.execute('show databases') #执行sql one = cursor.fetchone() #取出一条数据 all = cursor.fetchall() #取出所有数据 print(one) print(all) # 建表 tb = ''' create table tb( id int primary key auto_increment, name char(10)) ''' cur.execute(tb) # 插入 row = cursor.execute("insert into test(name,sex) values(%s,%s)", ('shiwei','male')) # 更新 row = cursor.execute(“update test set name= ‘张三' where id = %s", (2,)) # 删除 cursor.execute('delete from user where id=%s ',(1,) ) # 关闭连接 # 事务,数据改动的时候 cur.execute('commit') con.commit() #提交事物 cursor.close() #关闭游标 con.close() # 关闭连接 ## 联合查询 union = ''' select s.name, c.name,d.name from `student` s left join `select` se on se.s_id = s.s_id left join course c on se.c_id = c.id left join department d on s.dept_id = d.id ORDER BY s.name; ''' # cursor.execute(union) # find =cursor.fetchall()
阶段三、python操作redis
1、模块安装
pip install redis
2、基本操作
# 创建连接 re = redis.Redis(host='127.0.0.1', port='55555') ## 测试 re.set('num',15) print(re.get('num')) ## set 中文 re.set('name','张三') print(re.get('name').decode('utf8') ) ### 大部分的命令 和 redis 中操作一样 不同: re.expire('user_name', 20) # 添加过期时间 re.ttl('user_name') ### 不能看 负数 -1 -2 re.mset(a=1, b=2) ## 用键值对 mget a b re.incr('read_count') ## incr 可以加参数,代替了 incrby get read_count re.decr() ## decr 可以加参数,代替了 decrby lrange list_1 0 -1 lpush list_1 2 3 4 5 3 re.lrem('list_1', 3, 0) ## num 放到后面 re.hmset() # 多插入,用字典 re.hmset('users', {'name': 'shiwei', 'age': 18})