一个。列级
GO
CREATE TABLE Products
(
ProductID INT CONSTRAINT pk_products_pid PRIMARY KEY,
ProductName VARCHAR(25)
);
GO
湾表级
CREATE TABLE Products
(
ProductID INT,
ProductName VARCHAR(25),
CONSTRAINT pk_products_pid PRIMARY KEY(ProductID)
);
GO
列级别和表级别约束之间有什么区别吗?
答案 0 :(得分:12)
没有。如何应用约束只是个人品味的问题。
主键约束只是一个主键约束 - 它总是适用于表(毕竟:它可能包含多个列 - 它不能“在列级别”)。
在另一种情况下,它不是“在列级别”或“表级别” - 它始终是相同的。
只是为了好玩 - 您还可以通过第三种方式创建主键约束:
(CREATE TABLE statement)
GO
ALTER TABLE dbo.Products
ADD CONSTRAINT PK_Products_pid PRIMARY KEY(ProductID)
再次与您已有的其他两个选项相同。
答案 1 :(得分:7)
您的第一个示例声明约束在行,第二个示例没有。只有简单键(涉及一个属性)可以在行中声明,复合键(涉及多个列)不能。但两者都是表级约束!
有四种逻辑级别的约束:
1)栏目级别:
CHECK ( ProductID > 0 )
2)行级别:
CHECK ( Product_start_date < Product_end_date )
3)表级别(SQL Server中尚不支持以下示例):
CHECK ( NOT EXISTS ( SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( PARTITION BY ProductID ) AS Tally
FROM Products AS P ) AS DT1
WHERE Tally > 1 ) )
4)数据库级别(SQL Server中尚不支持):
CREATE ASSERTION EnterpriseUniqueIds
CHECK ( NOT EXISTS ( SELECT *
FROM ProductID AS P
JOIN Components AS C
ON C.ComponentID = P.ProductID ) );
键约束涉及比较同一表中的不同行,因此它是表级约束。
答案 2 :(得分:1)
派对有点迟,但其他人为FYI
答案 3 :(得分:0)
有两种方法可以定义约束,一种是在列级别,另一种是在表级别。可以使用这些方法中的任何一种来应用约束。