簡體   English   中英

MySQL-強制新記錄字段值大於先前記錄字段值的約束

[英]MySQL - Constraint to Force New Record Field Value to be Greater than Previous Record Field Value

我正在嘗試創建一個數據庫架構,以強制將特定表中的記錄確認為以下示例數據結構所表示的格式...

+--------------+--------+---------------+-----------------+
| 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      |
+--------------+--------+---------------+-----------------+

基本上,我想強制要求,對於EQUIPMENT_ID和CML_ID的特定組合,最大的INSPECTION_ID(AUTO INCREMENTED)始終具有最大的INSPECTION_DATE(由用戶手動輸入)。

用外行的話來說,我想確保用戶始終按時間順序輸入檢查。

我可以執行某種規則,約束或架構設計嗎?

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM