假設我有Job (JobPK INT 等)和Employee (EmployeePK INT, Age INT 等) 表。
我想創建另一個表A,定義為:
CREATE TABLE A
(
JobFK INT,
EmployeeFK INT,
CONSTRAINT FOREIGN KEY (JobFK) REFERENCES Job(JobPK),
CONSTRAINT FOREIGN KEY (EmployeeFK) REFERENCES Employee(EmployeePK)
)
例如,我只能添加年齡大于 25 歲的員工。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您可以有關系約束或值約束。不可能在一個約束條件下同時擁有兩者。
對于值約束,您可以在創建表時定義它或稍后使用ADD CONSTRAINT.
例如:
CREATE TABLE Employee (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=25)
);
你不能有一個關系約束來確保只有年齡大于 25 歲的員工。關系約束總是適用于所有記錄,而不是它的子集。
uj5u.com熱心網友回復:
我總是在 UI 級別(一些驗證插件)中實作這些型別的限制。
在 SQL Server中可以使用CHECK
ALTER TABLE Employee ADD CONSTRAINT CK_AGE
CHECK (Age < 80 AND Age > 25)
uj5u.com熱心網友回復:
alter table tablename
add fieldname datatype check(conditional expression);
例子 :
alter table A
add age smalint check(age >= 25);
uj5u.com熱心網友回復:
最好在應用程式級別執行此操作。盡管如此,您可以將其實作為資料庫約束
CREATE TABLE Employee
(
EmployeePK INT identity(1,1) ,
Age int,
CONSTRAINT pk0 PRIMARY KEY (EmployeePK),
CONSTRAINT uk1 UNIQUE (EmployeePK, Age)
);
和
CREATE TABLE A
(
JobFK INT,
EmployeeFK INT,
EmployeeAge INT CHECK (EmployeeAge >=25),
CONSTRAINT fk1 FOREIGN KEY (EmployeeFK) REFERENCES Employee(EmployeePK),
CONSTRAINT fk2 FOREIGN KEY (EmployeeFK, EmployeeAge) REFERENCES Employee(EmployeePK, Age) ON UPDATE CASCADE
);
插入測驗資料
insert Employee
values (30),(20);
insert A
values (100,1,30);
此查詢將失敗:
insert A
values (100,2,20);
update Employee
set age = age-10
where age > 25;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325113.html
標籤:sql sql-server 关系型数据库 数据库模式 检查约束
上一篇:如何檢查SELECT是否有任何與SQLServer中的WHERE條件匹配的行
下一篇:根據其他三個列的值創建自定義列
