MySQL中MUL,PRI和UNI有什么区别?

我正在使用以下命令进行MySQL查询:

desc mytable;

其中一个字段显示为MUL键,其他字段显示为UNI或PRI。

我知道如果键是PRI,则每个表只能有一个记录与该键关联。 如果键是MUL,是否表示可能有多个相关记录?

这是mytable的响应。

+-----------+---------+------+-----+---------+-------+

| Field     | Type    | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| courseid  | int(11) | YES  | MUL | NULL    |       |

| dept      | char(3) | YES  |     | NULL    |       |

| coursenum | char(4) | YES  |     | NULL    |       |

+-----------+---------+------+-----+---------+-------+

DESCRIBE

这实际上是以下目的的快捷方式:

在任何情况下,"键"属性都有三个可能的值:

PRI

UNI

MUL

PRI和UNI的含义很清楚:

PRI =>主键

UNI =>唯一键

第三种可能性MUL(您询问的)基本上是既不是主键也不是唯一键的索引。该名称来自"多个",因为允许多次出现相同的值。直接来自MySQL文档:

If Key is MUL, the column is the first column of a nonunique index in which multiple occurrences of a given value are permitted within the column.

最后还有一个警告:

If more than one of the Key values applies to a given column of a table, Key displays the one with the highest priority, in the order PRI, UNI, MUL.

作为一般说明,MySQL文档非常不错。如有疑问,请检查!

"主键必须包含唯一值。" w3schools.com/sql/sql_primarykey.asp

在某些情况下,可以说MUL表示密钥是外键吗?

这个答案比公认的要好得多。

@ robguinness,MySQL文档的读取方式与非英语版本类似。很多时候,他们用3行来解释可以用1行完成的操作。

另请注意,带有外键引用另一个表主键的表是MUL。

@pacerier,关于MySQL文档的详细信息,我同意您的看法。这就是为什么Stackoverflow通常是我首先检查的地方,尤其是如果Im急的话。 ;-)

这意味着该字段是非唯一索引(的一部分)。您可以发出

查看有关表结构的更多信息。

如果该字段是非唯一索引(的一部分),那么为什么MUL仅针对该列而不是所有其他列显示?

必然没有其他涉及的列。非唯一表示同一个值在该列中可以出现多次。

深入了解MySQL中的MUL,PRI和UNI是什么?

从MySQL 5.7文档中:

If Key is PRI, the column is a PRIMARY KEY or is one of the columns in a multiple-column PRIMARY KEY.

If Key is UNI, the column is the first column of a UNIQUE index. (A UNIQUE index permits multiple NULL values, but you can tell whether the column permits NULL by checking the Null field.)

If Key is MUL, the column is the first column of a nonunique index in which multiple occurrences of a given value are permitted within the column.

现场例子

对照组,此示例没有PRI,MUL或UNI:

mysql> create table penguins (foo INT);

Query OK, 0 rows affected (0.01 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

具有一列和一列的索引的表具有MUL:

mysql> create table penguins (foo INT, index(foo));

Query OK, 0 rows affected (0.01 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | YES  | MUL | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

具有作为主键的列的表具有PRI

mysql> create table penguins (foo INT primary key);

Query OK, 0 rows affected (0.02 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | NO   | PRI | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

具有唯一键列的表的表具有UNI:

mysql> create table penguins (foo INT unique);

Query OK, 0 rows affected (0.01 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | YES  | UNI | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

包含foo和bar索引的表仅在foo上具有MUL:

mysql> create table penguins (foo INT, bar INT, index(foo, bar));

Query OK, 0 rows affected (0.01 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | YES  | MUL | NULL    |       |

| bar   | int(11) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

2 rows in set (0.00 sec)

在两列上有两个单独索引的表每个都有MUL

mysql> create table penguins (foo INT, bar int, index(foo), index(bar));

Query OK, 0 rows affected (0.01 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | YES  | MUL | NULL    |       |

| bar   | int(11) | YES  | MUL | NULL    |       |

+-------+---------+------+-----+---------+-------+

2 rows in set (0.00 sec)

具有跨越三列的索引的表的第一行包含MUL:

mysql> create table penguins (foo INT,

bar INT,

baz INT,

INDEX name (foo, bar, baz));

Query OK, 0 rows affected (0.01 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| foo   | int(11) | YES  | MUL | NULL    |       |

| bar   | int(11) | YES  |     | NULL    |       |

| baz   | int(11) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

3 rows in set (0.00 sec)

具有外键引用另一个表的主键的表是MUL

mysql> create table penguins(id int primary key);

Query OK, 0 rows affected (0.01 sec)

mysql> create table skipper(id int, foreign key(id) references penguins(id));

Query OK, 0 rows affected (0.01 sec)

mysql> desc skipper;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id    | int(11) | YES  | MUL | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

mysql> desc penguins;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id    | int(11) | NO   | PRI | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

将其粘贴在您的新皮层中,并将刻度盘设置为" frappe"。

对于Mul来说,这对我也是有用的文档-http://grokbase.com/t/mysql/mysql/9987k2ew41/key-field-mul-newbie-question

" MUL表示键允许多行具有相同的值。

也就是说,它不是唯一键。"

例如,假设您有两个模型,"发布"和"评论"。 Post与Comment具有has_many关系。那么对Comment表具有MUL键(Post id)将是有意义的,因为可以将许多评论归因于同一Post。

如果它不是唯一键,为什么要明确提及为MUL?默认情况下它不是唯一的,不是吗?还是我错过了什么?

@SudipBhandari如果您在既不是主要也不是唯一的字段上设置索引,则MySQL会将密钥类型设置为MUL,除了上面的解释之外,这种类型的类型有助于MySQL理解它正在处理的索引类型。

mysql pri_关于mysql:SQL键,MUL,PRI和UNI相关推荐

  1. mysql 中的pri_关于MySQL中 主键 pri mul

    因为虽然索引的多列组合是唯一的,比如ID+NAME是唯一的,但是没一个单独的列依然可以有重复的值,只要ID+NAME是唯一的即可 1. 如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, ...

  2. 在MySQL中,MUL、PRI和UNI有什么区别?

    从Mysql 5.7文件: 如果键是PRI,则列是主键或多列主键中的列之一. 如果键是UNI,则该列是唯一索引的第一列.(唯一索引允许多个空值,但可以通过检查Null字段来判断该列是否允许空.) 如果 ...

  3. MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询

    第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...

  4. 【MySQL】解决MySQL删除外键(foreign key)时报错问题

    [MySQL]解决MySQL删除外键(foreign key)时报错问题 文章目录 [MySQL]解决MySQL删除外键(foreign key)时报错问题 一.现象 二.分析 三.问题解决 四.拓展 ...

  5. 【MYSQL】foreign key 外键约束(详解)

    外键是关联不同表之间的一个联接,比如我们现在有两张表: 那么如何设置外键呢? mysql> create table class(classId int primary key auto_inc ...

  6. MySQL基础教程 包含SQL语句、约束、表关系、设计范式、多表、事务等

    简介 数据库 ​ 数据库(Database):是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. ​ 我们也可以将数据存 ...

  7. 【MySQL】如何使用SQL语句获取表结构和获取全部表名

    目录 一.业务背景 二.如何获取全部表名 三.如何获取表结构 四.总结 一.业务背景 在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里. 具体到业务中的需求比如: 导 ...

  8. 第二十三章 MySQL数据库 手册2 SQL语句

    第二十三章 MySQL数据库 手册2 SQL语句 实验二:用SQL语句,管理数据库 `危险命令,delete 后不加 where 条件代表删除所有数据 delete.` `更加危险的删除命令trunc ...

  9. 为什么 MySQL 的自增主键不单调也不连续

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 转自:真没什么逻辑/Draveness 当我们在使用关系型数据库时 ...

最新文章

  1. c语言数据储存系统,编的学生成绩管理系统 从文件中读取保存数据总会多读入一组乱码数据...
  2. WebDriver(C#)之十点使用心得
  3. 【转】4.3SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)
  4. UI设计素材|底部导航设计的黄金法则
  5. tcpip网络编程 尹圣雨源码_网络编程——学习笔记
  6. phpstrpos不存在_深入理解PHP之strpos
  7. 获得每种调制方式中每个信噪比的准确度
  8. 我的上岸之旅——深圳工业大学
  9. 如何读取通用配置文件conf?
  10. 【计算机英语】期末复习笔记
  11. 漫谈国内外Android生态:华为发布的 HMS 服务,对 Mate30 系列无法搭载 Google GMS 的补偿有多大(本人原创)
  12. 抽样技术--简单随机抽样
  13. 【干货】2019年最新高级前端视频教程,速度收藏!!
  14. 中文写程序,何陋之有?
  15. H265/HEVC 常用缩写词及其含义
  16. Python学习笔记:2.2.3 习题课06
  17. 作为一名Sem优化师,平台怎么选?甲方or乙方?
  18. python中true用法_使用True/False作为键-如何/为什么这样做?
  19. 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 III
  20. 真实、迅雷、QQ旋风下载地址转换

热门文章

  1. mac lion 系统安装
  2. 计算机网络笔记及思维导图(3)——数据链路层
  3. python字符串操作入门十八讲——合集一
  4. html css主题,HTML+CSS=无限可能——案例详解:我的POI主题作品
  5. 软件工程期末复习笔记(文末有PDF版本)
  6. 【C++实现】编译原理 免考小队 NFA转换为等价的DFA
  7. LL教你入侵网站(算是吧)--对于天津理工教务处网站找回密码方案的建议
  8. 毕业生社保、档案和户口详解 1
  9. 手写迷你SpringMVC框架
  10. ppt制作教程与原理介绍(学习记录)