mysql - 为什么我们需要表中的主键?
问题描述
首要的关键:
- 用于作为表中每一行的唯一标识符。
- 不能接受 NULL 值。
- 创建聚集索引。
- 只有一个主键
唯一键:
用于作为表中行的唯一标识符。
可以接受一个 NULL 值。
创建非聚集索引
多个唯一键
几乎我们使用主键来唯一标识每一行,所以唯一键也是如此。
我不确定我是对还是错,但是如果我们创建一个具有非空约束的唯一键将提供与主键提供的几乎相同的行为。
例如:
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int);
那么为什么我们真的需要一个主键,因为一个唯一的键可以帮助我们实现我们想要的任何东西呢?
我们也可以使用唯一键作为引用表的外键。
解决方案
许多关系纯粹主义者将提升一个键作为“主键”视为错误1,并认为应该平等对待所有候选键。如果您属于那种思想流派(就像您看起来那样),那么您是正确的,您不需要PK。
1在SQL本身的设计中,在具备这个特性。
同样,理论家认为由零列组成的键没有问题(声明该键的表确实有意义,并且只能包含 0 或 1 行)。但是这里 SQL 会阻止你声明这样的键。
推荐阅读
- javascript - 如何修复数据表搜索框和分页正确?
- c++ - 无锁单生产者/单消费者循环缓冲区 - CPU 推测能否打破内存屏障逻辑?
- javascript - 如何将函数参数传递给外部函数?
- android - Cordova Vue 在键盘可见时启用滚动视图
- matlab - 两个图由不需要的线连接 - 动画线
- c++ - 将未知数据库文件从 Windows 软件转换为 MySqli 数据库
- regex - 正则表达式非重复二元组
- javascript - 如果到应用程序的深层链接有效,则停止 window.location
- node.js - 当似乎没有其他应用程序试图使用该端口时,如何修复 Node.js 中的“events.js:167 错误错误:连接 ECONNREFUSED 127.0.0.1:443”?
- javascript - 使用 graphql 模式语言的嵌套查询