[英]MySQL select row where one field is less than the previous record and one field is greater
[英]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.