Mysql

為 SQL 中的表創建添加約束

  • April 10, 2021

我必須創建一個包含元素 P、PType、PName、Price 和 Origin 的表 Product。

我需要約束所有具有 PType“肉類”的產品必須將“歐洲”作為原產地。我想在更改表中添加約束,但我看到使用更改表意味著在創建原始表後對其進行修改,但我需要在創建表時具有此條件。我不知道如何寫這個約束,有人可以給我提示嗎?

在 MySQL 8 (>= 8.0.16 ) 你可以使用CHECK CONSTRAINT

在舊版本中,您需要一個INSERT/UPDATE TRIGGER

也就是說,您還應該規範化您的表並使用查找(或參考/幫助)表來獲取 Origin id 和 Type id。

CREATE TABLE Product 
( 
    P INT 
  , PType varchar(19)
  , PName varchar(20)
  , Price DECIMAL(8,2)
  , Origin varchar(50)
  , CONSTRAINT CHK_type CHECK ((Ptype = 'meat' AND Origin ='Europe') 
                           OR Ptype <> 'meat' )
);
INSERT INTO Product VALUES (1,'meat','Kobe Beef',10000.00,'Japan')
違反檢查約束“CHK_type”。
INSERT INTO Product VALUES (1,'apple','Breaburn',10.00,'New Zealand')

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/289572