mysql - 使用具有良好原子性的 MySQL 唯一索引而不会引发错误

标签 mysql indexing unique atomic

我有这张表:

User
    id INT PK
    login VARCHAR UNIQUE

我想知道处理 UNIQUE 索引插入的最佳方式(例如:新用户创建)

1) 我可以简单地插入,当“出现重复条目​​”时,我捕获异常并在应用程序中处理它

=> 我不确定这是最好的解决方案

2) 我可以 SELECT ... WHERE login = ... 然后在没有找到记录时插入,或者如果选择找到某些东西则显示错误

=> 这不是原子的,插入可以发生在 SELECT 和 INSERT 之间

3) 我可以启动一个事务,SELECT FOR UPDATE,INSERT 然后在没有找到记录时 COMMIT 或 ROLLBACK 并在用户已经存在时显示错误

=> 这根本行不通,因为 MySQL 不会锁定任何现有行...所以它肯定会导致死锁

那么处理这个非常简单的研究案例的最佳方法是什么?

最佳答案

你可以做一个

INSERT IGNORE ...

MySQL manual INSERT

或者

REPLACE ...

MySQL manual REPLACE

关于mysql - 使用具有良好原子性的 MySQL 唯一索引而不会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9892083/

相关文章:

MySQL 使用 LIMIT 无论记录的 id 是什么

python - 更简单、更安全的字符串操作 Python

php - 循环时仅将唯一值插入数组

php - 将 SQL 表导出到 CSV,列名未出现

mysql - AWS RDS aurora Mysql 5.6 无法创建引擎不同于默认的表

java - 有没有办法将数据与文件夹层次结构中的文件相关联?

java - 如何在数组中生成唯一的随机数

qt - std::Qt 中的独特类似物?

mysql - group by 和 order by count desc 花费时间

mysql - 复合索引