2016-10-25 68 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(自動遞增)總是有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