我有一个名为 tbl_jobs
的表,用于存储应用程序中运行的一些后台作业的元数据。其模式如下:
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$$
每次作业运行时,都会在表中记录“类型”(用于区分不同作业的唯一标识符)、“运行时间”和“更新的记录数”。同时有两个不同的作业在相同时间运行,其类型为: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 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
和last_run_on
列的组合。
如果我删除第一个任务的条目,则插入成功,即只要求timestamp
唯一。
但是,相同timestamp
的冲突仅在这两个任务之间发生。有其他作业插入相同的timestamp
。
对于可能存在的问题有什么想法吗?
show create table tbl_jobs
吗? - jcho360DEFAULT ''
定义type
列,则可能会遇到问题。如果您期望在该列中输入内容,则不应将其默认为空。 - Kermit