2

我遇到了 2 个版本的 sql 代码..

--1
CREATE TABLE Location ( 
Id     INTEGER PRIMARY KEY 
                   NOT NULL,
Name   TEXT    NOT NULL 
);

--2
CREATE TABLE Location ( 
    Id     INTEGER PRIMARY KEY 
                       NOT NULL
                       UNIQUE,
    Name   TEXT    NOT NULL 
);

在SQL中,是否需要指定主键是唯一的而不是空的?
我一直认为主键是唯一的,不能为空。

4

4 回答 4

4

一张表最多可以有一个主键,但可以有多个唯一键。主键是唯一指定行的列的组合。这是唯一键的特例。一个区别是主键具有隐式 NOT NULL 约束,而唯一键则没有。

于 2011-04-09T17:37:05.670 回答
3

在主键列上指定“UNIQUE”是多余的——作为主键已经确保了这种情况。

于 2011-04-09T17:29:13.247 回答
2

UNIQUE 和 NOT NULL 都是不必要的,因为 PRIMARY KEY 意味着两者。

于 2011-04-09T17:34:51.750 回答
2

您的代码是有效的语法。它将创建覆盖同一列的 aPRIMARY KEY和约束。UNIQUE

一个表有多个键但不在同一组列上是有正当理由的。一个表可能只有一个键被标记为“主要”。每个表都需要至少一个键,但不需要将键标记为“主键”,即使表只有一个键。

在 SQL Server 中,标记为“主要”具有含义(例如NOT NULL,创建外键引用时的默认键等),但我更喜欢明确说明这些事情。大概是为了让你的桌子有一个唯一的钥匙,所以我建议你省略PRIMARY KEY. 我进一步建议你给你的UNIQUE钥匙一个明确的名字,例如

CREATE TABLE Location 
( 
 Id INTEGER NOT NULL 
    CONSTRAINT Location__key UNIQUE, 
 Name TEXT NOT NULL 
);
于 2011-04-11T13:18:05.543 回答