mysql错误1062:键的条目重复

5gfr0r5j  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(491)

我编写了一个sql脚本,用于创建和填充一些表,我将在django框架中使用这些表。
在我的日期表中,我创建具有唯一约束的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)

)引擎=innodb;
在脚本的后面,我有我的程序填充日期:

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月,这就是导致错误的原因。。
第121行出现错误1062(23000):键“idx\u mois”的重复条目“6”
有人能点我的蜡烛吗?
编辑:django中参数foreignkey.to\字段需要唯一约束,因为我想将astreinte\ mensu.mois字段链接到date.mois字段。这样我希望它显示的是月份,而不是django管理页面截图中显示的完整日期

bgtovc5b

bgtovc5b1#

没有用于日期组件的列;而不是在 SELECT 使用各种datetime函数
使用日期算术函数优先于数字和字符串函数。例子 CURDATE() - INTERVAL 2 MONTH . UNIQUE KEY idx_mois (mois) 意味着该表中的行不会超过12行?或者你有超过12个月的时间?也许你不是故意的 UNIQUE ?

相关问题