我有一个名为
对于这个问题,我使用事务处理,在开始时插入函数使用
问题是,有可能用户同时提交具有相同
'games'
的表,其中包含一个名为'title'
的列,该列是唯一的,数据库使用的是PostgreSQL
我有一个用户输入表单,允许他在'games'
表中插入一个新的'game'
。插入新游戏的函数会检查先前输入过具有相同'title'
的'game'
是否已存在,为此,我获取了具有相同游戏'title'
的行数。对于这个问题,我使用事务处理,在开始时插入函数使用
BEGIN
,获取行数,如果行数为0,则插入新行,完成后,它将COMMITS
更改。问题是,有可能用户同时提交具有相同
title
的2个游戏,因为我只获取行数以检查重复记录,并且每个事务都会与其他事务隔离
我考虑在获取行数时锁定表:LOCK TABLE games IN ACCESS EXCLUSIVE MODE;
SELECT count(id) FROM games WHERE games.title = 'new_game_title'
这将锁定表格以供阅读(这意味着其他事务必须等待,直到当前事务成功完成)。这将解决问题,这是我怀疑的。是否有更好的方法来避免重复具有相同标题的游戏?