SQL主键

我遇到了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中,是否有必要将主键指定为唯一而不是null? 我一直认为主键是唯一的,不能为空。     
已邀请:
一个表最多只能有一个主键,但不止一个唯一键。主键是唯一指定行的列组合。这是一个独特键的特例。一个区别是主键具有隐式NOT NULL约束,而唯一键不具有。     
在主键列上指定“UNIQUE”是多余的 - 作为主键已经确保了这种情况。     
UNIQUE和NOT NULL都是不必要的,因为PRIMARY KEY意味着两者。     
您的代码是有效的语法。它将创建覆盖同一列的
PRIMARY KEY
UNIQUE
约束。 有一个表具有多个键但不在同一列列上的合理原因。表格可能只有一个标记为“主要”的键。每个表至少需要一个密钥,但是没有要求将密钥标记为“主要”,即使表只有一个密钥也是如此。 在SQL Server中,标记为“主要”具有含义(例如,
NOT NULL
,创建外键引用时的默认键等)但我更喜欢明确这些事情。大概是你的桌子有一个唯一的关键所以我建议你省略
PRIMARY KEY
。我还建议你给你的
UNIQUE
键一个明确的名称,例如
CREATE TABLE Location 
( 
 Id INTEGER NOT NULL 
    CONSTRAINT Location__key UNIQUE, 
 Name TEXT NOT NULL 
);
    

要回复问题请先登录注册