MySQL错误1062:密钥的重复条目

时间:2018-06-14 09:29:56

标签: mysql sql database mariadb unique

我创建了一个SQL脚本,用于创建和填充一些我将用于Django框架的表。

在我的日期表格中,我创建了带有UNIQUE约束的 mois 列,如下所述:

    CREATE TABLE date (
        dateID int NOT NULL,
        annee int NOT NULL,
        mois int NOT NULL,
        .
        .
        CONSTRAINT PK_date PRIMARY KEY (dateID, annee, mois, semaine, jour),
        UNIQUE KEY idx_mois (mois),
    ) Engine=innoDB;

这是FKs的定义:

CREATE TABLE astreinte_mensu (
dateID int NOT NULL PRIMARY KEY,
annee int,
mois int,
Personne1Nuit int,
Personne2Nuit int,
Personne1Jour int,
Personne2Jour int,
FOREIGN KEY (annee) REFERENCES date(annee),
FOREIGN KEY (mois) REFERENCES date(mois),
FOREIGN KEY (Personne1Nuit) REFERENCES contact(PersonID),
FOREIGN KEY (Personne2Nuit) REFERENCES contact(PersonID),
FOREIGN KEY (Personne1Jour) REFERENCES contact(PersonID),
FOREIGN KEY (Personne2Jour) REFERENCES contact(PersonID)

)Engine = innoDB;

稍后在脚本中我有我的程序 fill_date

CREATE PROCEDURE fill_date()
BEGIN
DECLARE currentdate DATE;
DECLARE stopdate DATE;
SET currentdate = CURDATE();
SET stopdate = ADDDATE(currentdate, INTERVAL 1 YEAR);
WHILE currentdate < stopdate DO
INSERT INTO date VALUES (
YEAR(currentdate)*10000+MONTH(currentdate)*100 + DAY(currentdate),
YEAR(currentdate),
MONTH(currentdate),
WEEKOFYEAR(currentdate),
DAY(currentdate));

SET currentdate = ADDDATE(currentdate,INTERVAL 1 DAY);
END WHILE;
END

当我启动文件时,我收到了与重复条目相关的错误。

所以我的表从2018年6月到2019年6月,这导致错误..

  

ERROR 1062(23000)第121行:密钥'idx_mois'重复输入'6'

有人点燃我的蜡烛吗?

修改 Django中的参数 ForeignKey.to_field 需要UNIQUE约束,因为我想将 Astreinte_mensu.Mois 字段链接到 Date.mois 领域。 这样我希望它显示月份而不是完整日期,如Screenshot of django Admin page

所示

1 个答案:

答案 0 :(得分:0)

不要列出日期的组成部分;而是使用各种datetime functions

SELECT侧拆分

优先使用日期算术函数而不是数字和字符串函数。示例CURDATE() - INTERVAL 2 MONTH

UNIQUE KEY idx_mois (mois)意味着该表中的行数不会超过12行?或者你有超过12个月?也许你不是指UNIQUE