1

我正在尝试使用 MySQL 在将记录插入表时执行检查,以查看一对值是否已在另一条记录中使用。

场景是这样的:

我有一个名为 WORKLOG 的表,其中包含以下列:

LOGNO                   INTEGER UNSIGNED NOT NULL PRIMARY KEY,
HOURNO                  MEDIUMINT UNSIGNED NOT NULL,
EMPID                   INTEGER UNSIGNED NOT NULL,
JOBID                   INTEGER UNSIGNED NOT NULL,
DESCRIPTION             TEXT,

问题是多条记录不能有相同的 HOURNO 和 JOBID 对,因为这意味着同一时间的工作在同一工作上完成了两次。每项工作都有自己的小时数,因此小时数不可能是唯一的。我基本上是在尝试实现一个唯一的对,有点像复合主键。

所以如果我在表中有以下行

(0001,1,0034,2938,"some text")
(0002,2,0034,2938,"some text")
(0003,1,0045,2939,"some text")
(0004,3,0034,2938,"some text")
(0005,2,0056,2939,"some text")
(0006,4,0034,2938,"some text")
(0007,3,0083,2939,"some text")
(0008,4,0083,2939,"some text")

我不应该添加以下内容,因为 HOURNO 和 JOBID 对已经存在于另一行(即行 0006)中:

(0009,4,0056,2938,"some text")

有没有我可以做的检查?

4

1 回答 1

4

我建议在这两列上添加一个 UNIQUE 约束。它们听起来像一个复合候选键。这样,数据库将为您强制执行参照完整性。确保您的表是 InnoDB。

于 2012-12-05T13:08:03.193 回答