python 多人連接mysql 對mysql進行事務操作 對mysql加鎖與釋放鎖
下面這個是user1代碼塊
# -*- coding: utf-8 -*-
# user1
import pymysql
import timeconn = pymysql.connections.Connection(host="localhost", user='debian-sys-maint', password='wL5wsDKDub4gT2EU',database='python3_1', port=3306, charset='utf8')
cusor_1 = conn.cursor()sql = "update students set name='huanghaibo' where id=2"
cusor_1.execute(sql)
time.sleep(20)
print('awaken')
conn.commit()
cusor_1.close()
conn.close()
下面這個是user2代碼塊
# -*- coding: utf-8 -*-
#user2
import pymysql
import timeconn = pymysql.connections.Connection(host="localhost", user='debian-sys-maint', password='wL5wsDKDub4gT2EU',database='python3_1', port=3306, charset='utf8')
cusor_1 = conn.cursor()
print('successfull connect')sql = "update students set name='wewewe' where id=2"
cusor_1.execute(sql)
print('test execute')
conn.commit()
print('test commit')
cusor_1.close()
conn.close()
可以粘貼下來自己執行以下 看看 print語句怎么輸出的 ,其實就很清楚了
user1 用戶 連接數據庫后 進行了對id=2的這一行數據進行修改操作,這時候user1就獲得了一把鎖 ,是對id=2 這一行數據進行加鎖, sleep(20) 20秒內,一直到 commit()執行 之前這段時間 都出于加鎖狀態,直到 commit()執行,user1就會釋放該鎖
這段時間內 user2用戶雖然連接成功數據庫,但是也想操作id=2這一行的數據,就會進入阻塞狀態,一直會等待到 user1 commit() 方法執行完成以后,user2又會獲得id=2這一行數據的鎖,來對這一行數據進行操作,直到commit()執行后,又會釋放該鎖