mysql - 防止MySQL中的重复输入(例如,当快速调用多次插入请求时)

标签 mysql transactions duplicates mariadb banking

你好,我有一个问题:

我正在 MySQL 上制作一个简单的存款和取款表。

我想知道一种方法来进行强大的提款/存款条目插入,以防止重复输入(例如,当用户执行双重提款 API 请求时)。有人知道有什么好方法吗?

我正在考虑使用表锁,但是这只能用MYISAM来完成,并且性能可能会很低? 另一种方法是使用唯一 key ,那么提现入口的唯一 key 可以是什么呢?

简单场景示例:

您在比特币交易网站上拥有 1 BTC。当您将 1 BTC 提取到钱包中时,代码将在提款表中创建 1 BTC 的提款条目。

如何确保代码不会为该 1 BTC 创建双重提款条目?

最佳答案

BEGIN;
UPDATE ... amt = amt - $amt WHERE ...;
UPDATE ... amt = amt + $amt WHERE ...;
INSERT INTO transactions ...;
COMMIT;

这就是 InnoDB 防止经典问题的方法。您指的是另一种情况吗?

关于mysql - 防止MySQL中的重复输入(例如,当快速调用多次插入请求时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49084648/

相关文章:

Php, Mysql Select from table where row = ?有可能的?

Android 数据库事务

ruby-on-rails - 确保 Rails 应用程序中用户 'balance' 的完整性

mysql - 在 Mysql 中标记旧的重复项

mysql - MySQL 案例中的条件

MySQL:在数据类型为 varchar 的字段上应用 ORDER BY

mysql - 无法使用 @rodrigogs/mysql-events Zongji 事件监听器更改 Node 客户端的 serverId

php - 如何在 Laravel 中检索事务内创建的值并将其返回到事务外?

javascript - 用新号码替换重复项

java - 在不改变元素顺序的情况下删除数组中的重复项