sql—避免在特定mysql列中出现重复记录

wqnecbli  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(371)

这个问题在这里已经有答案了

如何为mysql中的多列指定唯一约束(14个答案)
两年前关门了。
我有一个拍卖系统,其中多个用户可以出价,但我有一个问题,当出价发生在同一时间,因为他们是在数据库中输入相同的价值在数据库中 bidding_price 列,例如:
0.02
0.02
0.02
我安装了一个select,它返回给定拍卖的所有具有相同值(重复性)的出价:

SELECT bidding_price, count(*)
    FROM bid_account
    WHERE auction_id = 1335
    GROUP BY bidding_price
    Having Count(*) > 1

在这种情况下,他将返回身份证1335拍卖的口是心非。
结构 bid_account 表如下所示:

id | int(255) - index - primary - AUTO INCREMENT
auction_id | int(11) - id of auction
bidding_price | float(20,2) - bid amount, eg. 0.02

我甚至创建了一个删除,可以删除重复,但这将是不公平的一些用户有出价删除由于系统错误。遵循:

DELETE ba
    FROM bid_account ba JOIN
         (SELECT ba2.auction_id, ba2.bidding_price, MAX(ba2.id) as max_id
          FROM bid_account ba2
          WHERE ba2.auction_id = ?
          GROUP BY ba2.auction_id, ba2.bidding_price
         ) ba2
         ON ba2.auction_id = ba.auction_id AND
            ba2.bidding_price = ba.bidding_price AND
            ba2.max_id > ba.id
WHERE ba.auction_id = ?;

“与” ? 因为它通过参数接收值。
有没有人知道我怎样才能解决这个问题,避免 bidding_price 表,但对于 auction_id 列?
表中有几个相等的数值 bidding_price ,但不可能发生的是同一拍卖的相等价值,也就是说,同一拍卖的相同价值 auction_id .
我想到了创建一个更新,它会事先检查是否有重复项,如果存在,它会通过在每个重复项中多插入1美分来更新值。但我认为,如果同时有3个投标,问题就不会出现了。
这个sql命令将在节点上运行,并且将在cron中每秒运行一次,也就是说,每次执行此检查时。如果现在有一个重复的出价,下一秒它将确定和修复。
投标系统与一个15秒倒计时计时器一起工作,当有人投标时,计时器返回到最初的15秒。

esbemjvw

esbemjvw1#

我认为您可以在sql端通过给该列一个“惟一”选项来解决这个问题。
你可以在这里阅读更多-mysql-unique
编辑:
我知道你有多个出价值,但不同的拍卖。您可以基于另一列将列指定为唯一的—这意味着它将允许多个相同的值,但如果相同的“其他列”相同,则不允许。
在这里阅读更多-如何为mysql中的多个列指定唯一约束?

5lhxktic

5lhxktic2#

如果您使用的是数据库,您可以尝试使用您的出价金额唯一

CREATE TABLE bidding system (
bid_amount int NOT NULL UNIQUE,
LastName varchar(15) NOT NULL,
FirstName varchar(15)
);

相关问题