避免在特定的MySQL列中重复记录

时间:2018-04-15 20:37:09

标签: mysql sql

我有一个拍卖系统,其中有多个用户可以出价,但是当我们在bidding_price列中使用相同值输入数据库的同时出价时,我遇到了问题,例如:

  

0.02
  0.02
  0.02

我已经安装了一个选择,该选择返回给定拍卖的所有具有相等值(双重性)的出价:

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

在这种情况下,他将返回ID为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,但是由于系统错误而导致某个用户删除了出价是不公平的。遵循:

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秒。

2 个答案:

答案 0 :(得分:0)

我认为你可以通过给那个列一个" UNIQUE"来解决这个问题。选项。

您可以在此处阅读更多内容 - Mysql - UNIQUE

编辑:

我知道您有多个出价值,但适用于不同的拍卖。 您可以根据另一列将列指定为UNIQUE - 这意味着它将允许多个相同的值,但如果相同的"其他列"是完全相同的。

在此处阅读更多内容 - How do I specify unique constraint for multiple columns in MySQL?

答案 1 :(得分:0)

如果您使用的是数据库,则可以尝试使用bid_amount的唯一

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