编写函数tranMoney(no1, no2,money),实现把money元钱从学号no1的同学转款到学号为no2的同学。
时间: 2024-03-07 09:47:19 浏览: 15
好的,根据您的要求,我给出Python语言实现tranMoney函数的代码:
```python
import pymysql
def tranMoney(no1, no2, money):
# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='test', charset='utf8mb4')
try:
# 开始事务
conn.begin()
# 查询no1的余额
cursor = conn.cursor()
cursor.execute('SELECT balance FROM student WHERE id=%s FOR UPDATE', no1)
balance1 = cursor.fetchone()[0]
# 判断余额是否足够
if balance1 < money:
raise Exception('no1账户余额不足')
# 查询no2的信用值
cursor.execute('SELECT credit FROM student WHERE id=%s FOR UPDATE', no2)
credit2 = cursor.fetchone()[0]
# 判断信用值和转账金额是否符合要求
if credit2 < 50 and money > 200:
raise Exception('no2信用值太低,一次转款金额不得超过200元')
# 更新no1和no2的余额
cursor.execute('UPDATE student SET balance=balance-%s WHERE id=%s', (money, no1))
cursor.execute('UPDATE student SET balance=balance+%s WHERE id=%s', (money, no2))
# 添加转款记录
cursor.execute('INSERT INTO transfer_record (from_id, to_id, amount) VALUES (%s, %s, %s)', (no1, no2, money))
# 提交事务
conn.commit()
return '转款成功'
except Exception as e:
# 回滚事务
conn.rollback()
return str(e)
finally:
# 关闭数据库连接
conn.close()
```
具体实现步骤如下:
1. 连接数据库。
2. 开始事务。
3. 查询no1的余额,并加上FOR UPDATE,表示锁定这条记录,避免其他事务同时修改。
4. 判断no1的余额是否足够,不足则抛出异常。
5. 查询no2的信用值,并加上FOR UPDATE。
6. 判断no2的信用值和转账金额是否符合要求,不符合则抛出异常。
7. 更新no1和no2的余额。
8. 添加转款记录到转款记录表中。
9. 提交事务。
10. 如果出现异常,则回滚事务,并返回异常信息。
11. 关闭数据库连接。
需要注意的是,这里使用了FOR UPDATE语句锁定了查询出的记录,避免其他事务同时修改,保证了数据的一致性和完整性。
另外,具体的实现可能会因为数据库类型和版本等因素而有所差异,需要根据具体情况进行调整。