我有一个表tbl_jobs
,它存储了在应用程序中运行的一些后台作业的元数据。该模式是这样的:mysql中键“PRIMARY”的重复项
CREATE TABLE `tbl_jobs` (
`type` varchar(30) NOT NULL DEFAULT '',
`last_run_on` datetime NOT NULL,
`records_updated` text,
PRIMARY KEY (`type`,`last_run_on`),
UNIQUE KEY `index2` (`type`,`last_run_on`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$
每当一个作业运行它使在表中的type
这是不同的工作,run time
一个唯一的标识符,并在运行中records updated
的条目。
有两种不同类型的作业可以同时运行:MAILER_UNLOCKED_REWARDS
和MAILER_ALMOST_UNLOCKED
。
当这些作业尝试插入具有相同时间戳的条目时,只有其中一个插入,另一个将抛出重复条目错误。
例如两个工作运行以下:
INSERT INTO tbl_jobs
(type,
last_run_on,
records_updated)
VALUES ('MAILER_ALMOST_UNLOCKED',
'2012-08-22 19:10:00',
'f8a35230fb214989ac75bf11c085aa28:b591426df4f340ecbce5a63c2a5a0174')
运行成功,但是当第二作业运行INSERT命令
INSERT INTO tbl_jobs
(type,
last_run_on,
records_updated)
VALUES ('MAILER_UNLOCKED_REWARDS',
'2012-08-22 19:10:00',
'8a003e8934c07f040134c30959c40009:59bcc21b33a0466e8e5dc50443beb945')
它扔了错误
Duplicate entry 'M-2012-08-22 19:10:00' for key 'PRIMARY'
主键是type
和的组合10列。
如果我删除第一个作业的条目插入成功,即单独要求timestamp
是唯一的。
但是,对于相同的timestamp
冲突只发生在这两个作业之间。还有其他作业插入相同的timestamp
。
关于可能是什么问题的任何想法?
你能出现'show create table tbl_jobs' – jcho360
只是一个评论,我会建议使用代理键。您可能每秒钟发生多个条目。 – Kermit
由于主键必须是唯一的,您应该删除脚本的'UNIQUE KEY'行。 – sp00m