一尘不染

MySQL-创建表时一起使用时,“ PRIMARY KEY”,“ UNIQUE KEY”和“ KEY”的含义

mysql

约的目的谁能解释PRIMARY KEYUNIQUE KEY并且KEY,如果是在一个单一的放在一起CREATE TABLE在MySQL的声明?

CREATE TABLE IF NOT EXISTS `tmp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `tag` int(1) NOT NULL DEFAULT '0',
  `description` varchar(255),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uid` (`uid`),
  KEY `name` (`name`),
  KEY `tag` (`tag`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;

如何将此查询转换为MSSQL?


阅读 1569

收藏
2020-05-17

共1个答案

一尘不染

密钥只是普通索引。一种简化的方法是将其视为图书馆中的卡片目录。它为MySQL指明了正确的方向。

唯一键还用于提高搜索速度,但是它具有以下约束:不能有重复项(不存在两个x和y,其中x不是y且x == y)。

手册对它的解释如下:

UNIQUE索引会创建约束,以使索引中的所有值都必须不同。如果您尝试添加键值与现有行匹配的新行,则会发生错误。除BDB存储引擎外,此约束不适用于NULL值。对于其他引擎,UNIQUE索引允许可以包含NULL的列使用多个NULL值。如果为UNIQUE索引中的列指定前缀值,则列值在前缀中必须唯一。

主键是“特殊”唯一键。它基本上是唯一的密钥,除了用于识别某些东西。

该手册说明了一般如何使用索引:此处

在MSSQL中,概念相似。有索引,唯一约束和主键。

未经测试,但我相信等效的MSSQL是:

CREATE TABLE tmp (
  id int NOT NULL PRIMARY KEY IDENTITY,
  uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
  name varchar(255) NOT NULL,
  tag int NOT NULL DEFAULT 0,
  description varchar(255),
);

CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);

编辑:上面的代码经过测试是正确的;但是,我怀疑这样做有更好的语法。自从我使用SQL Server以来已有一段时间了,显然我已经忘记了很多:)。

2020-05-17