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のペアを持つことはできません。これは、同じ時間の作業が同じジョブで2回実行されることを意味するためです。各ジョブには独自の時間のトラックがあるため、時間はそれ自体で一意にすることはできません。私は基本的に、複合主キーのような一意のペアを実装しようとしています。

したがって、テーブルに次の行がある場合

(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

これらの2つの列にUNIQUE制約を追加することをお勧めします。それらは複合候補キーのように聞こえます。そうすれば、データベースは参照整合性を強制します。テーブルがInnoDBであることを確認してください。

于 2012-12-05T13:08:03.193 に答える