每天只允许在mysql表中插入一次

时间:2019-06-13 08:04:38

标签: php mysql

我需要做一个Web应用程序来收集来自不同服务的数据,并且我想限制每家商店每天仅通过sql中的php形式发布数据。

我尝试了不同的操作,但它们仍然重复或出现错误。

我的桌子看起来像这样:

$sql = "CREATE TABLE CA(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    jour DateTime() NOT NULL,
    shop VARCHAR(30) NOT NULL,
    ca_done VARCHAR(30) NOT NULL,
    objectif VARCHAR(70) NOT NULL ,
    objectif_last_year VARCHAR(30) NOT NULL ,
    comments VARCHAR(70) NOT NULL 
)";

和我尝试过的插入内容类似

$sql = "INSERT INTO CA (jour,shop, ca_done, objectif, objectif_last_year, comments) VALUES ('$jour','$shop', '$ca_done', '$objectif', '$objectif_last_year', '$comments') " 
 ;

我希望商店只能每天发布一次或更新其每日行而不创建重复项。

3 个答案:

答案 0 :(得分:0)

将列添加到表insert_date中,您将在其中存储插入日期。

然后在该表上创建插入触发器,您将在该表上检查特定商店当天是否已插入任何东西。基于此,您可以防止插入。

甚至更好的是,您可以在shop, insert_date上创建唯一约束。

答案 1 :(得分:0)

如果您可以将jour列更改为DATE数据类型,则可以添加唯一索引:

ALTER TABLE CA ADD UNIQUE INDEX (jour, shop);

否则,如果您使用的是MySQL 5.7,则可以添加一个虚拟列,其中包含jour列的日期部分,并将其用于索引中。

ALTER TABLE CA ADD COLUMN jourDate AS DATE(jour);
ALTER TABLE CA ADD UNIQUE INDEX (jourDate, shop);

答案 2 :(得分:-1)

谢谢!您的帮助。 所以我添加了insert_date列。 正如@Barmar建议的那样,我刚刚添加了:

CREATE UNIQUE INDEX uidx_pid ON ca (shop, insert_date)  它正在工作