2016-10-25 11 views
1

特定のテーブルのレコードを、以下のサンプルデータ構造で表されるフォーマットに強制するデータベーススキーマを作成しようとしています...MySQL - 新しいレコードフィールド値を前回のレコードフィールド値よりも大きくするようにする制約

+--------------+--------+---------------+-----------------+ 
| EQUIPMENT_ID | CML_ID | INSPECTION_ID | INSPECTION_DATE | 
+--------------+--------+---------------+-----------------+ 
| B1001-V001 |  1 |    1 | 2010-01-01  | 
| B1001-V001 |  1 |    2 | 2011-01-01  | 
| B1001-V001 |  1 |    3 | 2012-01-01  | 
| B1001-V001 |  1 |    4 | 2013-01-01  | 
| B1001-V001 |  1 |    5 | 2014-01-01  | 
| B1001-V001 |  1 |    6 | 2015-01-01  | 
| B1001-V001 |  1 |    7 | 2016-01-01  | 
| B1001-V001 |  1 |    8 | 2017-01-01  | 
| B1001-V001 |  1 |    9 | 2018-01-01  | 
| B1001-V001 |  1 |   10 | 2019-01-01  | 
| B1001-V001 |  2 |    1 | 2010-01-01  | 
| B1001-V001 |  2 |    2 | 2011-01-01  | 
| B1001-V001 |  2 |    3 | 2012-01-01  | 
| B1001-V001 |  2 |    4 | 2013-01-01  | 
| B1001-V001 |  2 |    5 | 2014-01-01  | 
| B1001-V001 |  2 |    6 | 2015-01-01  | 
| B1001-V001 |  2 |    7 | 2016-01-01  | 
| B1001-V001 |  2 |    8 | 2017-01-01  | 
| B1001-V001 |  2 |    9 | 2018-01-01  | 
| B1001-V001 |  2 |   10 | 2019-01-01  | 
+--------------+--------+---------------+-----------------+ 

基本的に私は最大のINSPECTION_ID(AUTOインクリメント)は常にEQUIPMENT_IDとCML_IDの特定の組み合わせのために(手動でユーザーが入力した)最大のINSPECTION_DATEを持っていることを強制します。私は、ユーザーが常に年代順に検査に入ることを確実にしたい素人の面では

私はこれを強制するために行うことができますルール、制約またはスキーマ設計のいくつかの並べ替えはありますか?

答えて

2

MySQLは制約を強制しませんので、それらがうまくいくかどうかは関係ありません。

あなたは、このような条件を強制するためにトリガーを使用する必要があります。更新を許可する場合は、更新と挿入のトリガーが必要です。

insertトリガーは次のようになります。迅速な対応ゴードンのため

CREATE TRIGGER t_trigger_insert ON t BEFORE INSERT 
FOR EACH ROW 
BEGIN 
    IF (EXISTS (SELECT 1 
       FROM t t2 
       WHERE t2.EQUIPMENT_ID = NEW.EQUIPMENT_ID AND 
         t2.INSPECTION_ID = NEW.INSPECTION_ID AND 
         t2.INSPECTION_DATE > NEW.INSPECTION_DATE 
       ) 
     ) THEN 
     SIGNAL SQLSTATE '45000' 
      SET MESSAGE_TEXT = 'A later date already exists'; 
    END IF; 
END; 
+0

感謝を。このルールを適用するために使用できるトリガーの例がありますか? – Josh

+0

ゴードンのために恐ろしい! – Josh

関連する問題