Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL——指“MySQL”的含义;主键“&引用;“唯一键”;及;“关键”;在创建表时一起使用时_Mysql_Sql Server_Primary Key_Unique Key - Fatal编程技术网

MySQL——指“MySQL”的含义;主键“&引用;“唯一键”;及;“关键”;在创建表时一起使用时

MySQL——指“MySQL”的含义;主键“&引用;“唯一键”;及;“关键”;在创建表时一起使用时,mysql,sql-server,primary-key,unique-key,Mysql,Sql Server,Primary Key,Unique Key,如果将主键、唯一键和键放在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),

如果将
主键
唯一键
放在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?

MySQL唯一和主键用于标识行。表中只能有一个主键,但有一个或多个唯一键。关键是索引

有关更多详细信息,请查看


要将mysql转换为mssql,请尝试此操作,并查看一个键只是一个普通索引。一种超越简化的方法是把它想象成图书馆的卡片目录。它为MySQL指明了正确的方向

唯一键也用于提高搜索速度,但它有一个约束,即不能有重复项(没有两个x和y,其中x不是y,x==y)

委员会解释如下:

唯一索引创建一个约束,使索引中的所有值 必须是不同的。如果您尝试添加带有 与现有行匹配的键值。此约束不适用 设置为除BDB存储引擎以外的空值。对于其他发动机,a “唯一索引”允许可以包含多个空值的列 无效的如果为唯一索引中的列指定前缀值, 列值在前缀中必须是唯一的

主键是“特殊”唯一键。它基本上是一个唯一的键,只是用来识别某些东西

本手册解释了索引的一般使用方法:

在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了,显然我忘记了很多:)。

为了补充其他答案,给出了以下解释:

  • 通常是
    索引
    的同义词。键属性
    主键可以
    当在列定义中给出时,也可以指定为仅
    。这 为与其他数据库系统兼容而实现

  • UNIQUE
    索引创建一个约束,使索引中的所有值 必须是不同的。如果您尝试添加带有 与现有行匹配的键值。对于所有发动机,a
    唯一
    索引允许对可以包含
    NULL
    的列使用多个
    NULL

  • 主键是唯一的索引,必须在其中定义所有键列 as
    不为空
    。如果它们没有显式声明为
    notnull
    ,则MySQL 隐式地(无声地)声明它们。一张桌子只能有一张桌子
    主键
    主键
    的名称始终是
    主键
    ,因此 不能用作任何其他类型索引的名称


相关:基本上,
索引
同义@Paul Bellora,你的解释比我的更清楚。很好,我只是引用了文档,没有看到第二部分关于转换的内容。我认为科尔宾的回答很好地概括了这一点。很好的解释!代码也运行良好。非常感谢你!没问题。很高兴我能帮忙:)。谢谢你给我指出手册中正确的位置!伟大的这个链接将引用主键中MySQL和SQL的类型。与其他数据库系统的兼容性?还有哪些数据库管理系统使用“键”这个词来表示根本不是键的东西(索引)?我一直认为这只是MySQL的一点奇怪之处——MySQL的作者实际上不知道键是什么:)每个后续定义是否包含前一个定义的所有属性。“唯一的钥匙”也是“钥匙”吗?