我想知道是否可以在标准 SQL中创建多个主键。我的意思是这样的:
CREATE TABLE(Surname CHAR(100) PRIMARY KEY, Name CHAR(100) PRIMARY KEY)
在SQL中这是合法的吗?如果没有,请链接我一个标准的参考,说明这是不可能的......
答案 0 :(得分:1)
编辑。
主键的定义是只有一个。所以,不,你不能在两个不同的columm上创建两个主键。
但是,您可以在一列上创建主键,在另一列上创建唯一的约束:
create table person
(
surname varchar(100) not null primary key,
name varchar(100) not null,
constraint only_one_name unique (name)
);
以上是我所知道的标准SQL。
以下是“SQL-99,Complete”一书的链接,该书以更实用的方式重新陈述了SQL标准:https://mariadb.com/kb/en/constraint_type-primary-key-constraint/
从书中引用:
基表可能受到不超过一个PRIMARY KEY约束的约束
SQL标准的原始措辞(不是免费的,所以没有人可以给你一个链接):
<table definition>
应指定最多一个隐式或显式<unique constraint definition>
,指定PRIMARY KEY
。
(强调我的)
请注意,您几乎不会想要char
- 特别是长度不超过两三个字符。 CHAR
数据类型将所有值填充到定义的长度。因此,如果您将值'FOO'
插入CHAR(10)
列,它将(必须)存储为'FOO '
答案 1 :(得分:0)
不,在SQL中创建两个主键是不合法的,如果您能够创建两个单独的主键,那么它就不再是主键了。
您可以创建复合主键,例如主键(姓氏,名称),例如但这绝不是适用的,不是好的实践,是名字和姓氏的主键。
答案 2 :(得分:0)
否 - 但您可以拥有一个由多列组合而成的主键:
来自MSDN:
表通常具有列或列组合,其中包含唯一标识表中每一行的值。此列或列称为表的主键(PK),并强制实施表的实体完整性。您可以在创建或修改表时通过定义PRIMARY KEY约束来创建主键。
表只能有一个PRIMARY KEY约束,参与PRIMARY KEY约束的列不能接受空值。由于PRIMARY KEY约束保证了唯一数据,因此它们经常在标识列上定义。
答案 3 :(得分:0)
这有点迂腐,但当然你不能创建多个主要键,就像房间里不能有一个以上最高的人一样。但是,您可以(并且应该多次)创建多个唯一键。除了一个小的区别,它们之间没有功能差异。唯一键可以用作FK约束的目标,也可以用作连接,就像主键一样。
答案 4 :(得分:0)
你只能有一个主键,但是这个主键可以由N列组成。
示例:
create table "TABLE NAME"(
"Surname" CHAR(100),
"Name" CHAR(100),
primary key ("Surname", "Name")
);
答案 5 :(得分:0)
您可以拥有包含多个列的主键。这通常在属性表中完成,其中键的一部分包含您所归属的表中记录的id。
您不能只拥有多个主键,因为它被列为“最重要的”。不可能有两件事“最重要”。