如果我理解正确,那么在表格上指定一个空键将确保它只包含零行或恰好一行。
是否可以在SQL中指定空键?
答案 0 :(得分:4)
您可以计算主键:
CREATE TABLE T
(
ID AS 1,
SomeField VARCHAR(100),
CONSTRAINT PK_T_ID PRIMARY KEY (ID)
);
INSERT T (SomeField) VALUES ('Test');
INSERT T (SomeField) VALUES ('Test2');
第一个插入将起作用,但第二个插入将抛出错误:
违反PRIMARY KEY约束' PK_T_ID'。无法在对象' dbo.T'中插入重复键。重复键值为(1)。
这将确保您的表包含0行或1行。
答案 1 :(得分:2)
要回答你的实际问题,"是否可以在SQL中指定一个空键" :没有。
就像不可能定义没有列的表(不是同一个问题,但是切向)。
GarethD的答案中的诡计和黑客是必要的。
答案 2 :(得分:0)
拥有一个空键相当于最多只有一个元组。 (最多一个与键值{}相关联的值。)
CHECK有很多限制。在SQL Server中,可以编写一个函数
CREATE TABLE T (c int);
GO
CREATE FUNCTION f()
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = COUNT(*) FROM T
RETURN @retval
END;
GO
ALTER TABLE T
ADD CONSTRAINT emptyKey CHECK (dbo.f() <= 1 );
GO
插入T(c)值(1),(2)
INSERT语句与CHECK约束“emptyKey”冲突。冲突发生在数据库“db_3_2c694d”,表“dbo.T”:INSERT INTO T(c)VALUES(1),(2)
对于此特定约束,DELETE不支持CHECK,这不是问题。 (但是,在约束中可能存在其他问题,而这些问题没有得到妥善处理。)