解决mysql重复插入数据

本文共有1000个字,关键词:

问题:由于用户多次点击按钮,导致增加数据时多次添加

解决:前端增加事件失效功能,后端增加锁机制

方法:

以下方法未试验过

1、代码锁(给代码的执行上锁,仅对单端口多进程有效,用户需等待前一请求处理结束)

import lock

lock.acquire()
你的业务逻辑
lock.release()

2、数据库表锁、行锁(能对多端口多进程有效)

行锁:
# 插入数据前先判断表中是否存在记录, 查询时加锁
if not session.query(User).filter_by(column=value).with_for_update().scalar():
    obj = User(
        column=value
    )    
    db.session.add(obj)
    # 提交事务, 锁解除
    db.session.commit()

类似select ... for update
session.Query(User).with_for_update().first()

类似select ... for share
session.Query(User).with_for_update(read=True).first()

3、使用sqlalchemy的事务

try:  
    session.begin()  
    # 执行查询或更新操作,此时会自动管理行锁  
    session.commit()  
except:  
    session.rollback()  
    raise

参考:

代码锁 https://www.cnblogs.com/shengulong/p/9961140.html
数据库表锁、行锁 https://www.lzskyline.com/archives/106/
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论