一文彻底搞清楚MySQL的主键、外键、约束和各种索引

这篇具有很好参考价值的文章主要介绍了一文彻底搞清楚MySQL的主键、外键、约束和各种索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.前言

主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询。

一文彻底搞清楚MySQL的主键、外键、约束和各种索引


1. 主键

主键是一种用于唯一标识表中每一行数据的标识符。在Mysql中,主键可以是一个或多个列的组合,但是必须满足以下条件:

  • 主键列的值必须唯一,不能重复。
  • 主键列的值不能为空,不能为NULL。
  • 一个表只能有一个主键。

主键可以用于加速查询和提高数据的完整性和安全性。在Mysql中,主键可以通过以下两种方式定义:

1.1. 在创建表时定义主键

在创建表时,可以通过在列定义后面添加PRIMARY KEY关键字来定义主键。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,id列被定义为主键。

1.2. 在已有表中添加主键

在已有表中添加主键,可以使用ALTER TABLE语句。例如:

ALTER TABLE `users` ADD PRIMARY KEY (`id`);

2. 外键

外键是一种用于建立表与表之间关联关系的机制。外键可以用于保证数据的完整性和一致性。在Mysql中,外键可以通过以下两种方式定义:

2.1. 在创建表时定义外键

在创建表时,可以通过在列定义后面添加FOREIGN KEY关键字来定义外键。例如:

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`),
  FOREIGN KEY (`product_id`) REFERENCES `products`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,orders表中的user_id和product_id列被定义为外键,分别引用了users表和products表中的id列。

2.2. 在已有表中添加外键

在已有表中添加外键,可以使用ALTER TABLE语句。例如:

ALTER TABLE `orders` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`);

3. 约束

约束是一种用于限制表中数据的规则。在Mysql中,约束可以用于保证数据的完整性和一致性。Mysql支持以下几种约束:

3.1. NOT NULL约束

NOT NULL约束用于限制列中的数据不能为NULL。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,name和email列被定义为NOT NULL。

3.2. UNIQUE约束

UNIQUE约束用于限制列中的数据不能重复。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL UNIQUE,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,email列被定义为UNIQUE。

3.3. CHECK约束

CHECK约束用于限制列中的数据必须满足指定的条件。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` int(11) NOT NULL,
  CHECK (`age` >= 18),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,age列被定义为CHECK约束,要求age的值必须大于等于18。

3.4. DEFAULT约束

DEFAULT约束用于指定列的默认值。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  `status` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,status列被定义为DEFAULT约束,如果插入数据时没有指定status的值,则默认为0。


4. 索引

索引是一种用于加速查询的机制。在Mysql中,索引可以用于提高查询效率和保证数据的完整性和一致性。Mysql支持以下几种索引:

4.1. PRIMARY KEY索引

PRIMARY KEY索引是一种用于唯一标识表中每一行数据的索引。在Mysql中,每个表只能有一个PRIMARY KEY索引。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,id列被定义为PRIMARY KEY索引。

4.2. UNIQUE索引

UNIQUE索引是一种用于限制列中的数据不能重复的索引。在Mysql中,每个表可以有多个UNIQUE索引。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL UNIQUE,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,email列被定义为UNIQUE索引。

4.3. INDEX索引

INDEX索引是一种用于加速查询的索引。在Mysql中,每个表可以有多个INDEX索引。例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  INDEX `idx_name` (`name`),
  INDEX `idx_email` (`email`),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,name和email列被定义为INDEX索引。

4.4. FULLTEXT索引

FULLTEXT索引是一种用于全文搜索的索引。在Mysql中,每个表只能有一个FULLTEXT索引。例如:

CREATE TABLE `articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL,
  `content` text NOT NULL,
  FULLTEXT INDEX `idx_content` (`content`),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上面的例子中,content列被定义为FULLTEXT索引。


5. 总结

本文介绍了Mysql中主键、外键、约束和索引的概念和用法。在实际应用中,应根据具体情况选择合适的主键、外键、约束和索引,以提高数据的完整性和一致性,加速查询。


一文彻底搞清楚MySQL的主键、外键、约束和各种索引文章来源地址https://www.toymoban.com/news/detail-481506.html

到了这里,关于一文彻底搞清楚MySQL的主键、外键、约束和各种索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql的主键索引为什么不能null

    这是一个非常奇怪且有趣的问题。可以通过官方文档进行解读 https://dev.mysql.com/doc/refman/5.7/en/glossary.html A special value in SQL, indicating the absence of data. Any arithmetic operation or equality test involving a NULL value, in turn produces a NULL result. (Thus it is similar to the IEEE floating-point concept of NaN, “not

    2024年02月14日
    浏览(48)
  • 主键、外键、建表范式、MySQL索引、用户管理

    1.1 问题 完成如下练习: 练习主键的创建、查看、删除、添加、验证主键 练习复合主键的使用 练习与auto_increment连用的效果 1.2 方案 主键使用规则: 表头值不允许重复,不允许赋NULL值 一个表中只能有一个primary key 表头 多个表头做主键,称为复合主键,必须一起创建和删除

    2024年01月16日
    浏览(33)
  • 【MySQL】更改表的主键报错及解决办法

    报错: [HY000][3750] Unable to create or change a table without a primary key, when the system variable ‘sql_require_primary_key’ is set. Add a primary key to the table or unset this variable to avoid this message. Note that tables without a primary key can cause performance problems in row-based replication, so please consult your DBA before changing

    2024年01月20日
    浏览(43)
  • MySQL:创建数据库,数据表,主键和外键

    目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表:  主键约束: 单字段主键: 多字段联合主键: 外键约束: MySQL数据库安装了很久,一直也没静下心来学习,因为起步太晚,所以什么都想学点,又感觉有些力不从心,目前

    2023年04月27日
    浏览(41)
  • 【MySQL】外键约束和外键策略

             外键约束 ( FOREIGN KEY ,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。         外键是指表中某个字段的值依赖于另一张表中某个字段的值,而 被依赖的

    2024年02月03日
    浏览(34)
  • 【⑫MySQL | 约束(二)】外键 | 默认值 | 检查约束 — 综合案例

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL外键 | 默认值 | 检查约束 以及综合案例的分享 ✨ 6. 外键约束(FOREIGN KEY,FK) 前面介绍的完整性约束都是在单表中进行设置,而外键约束则保证多个表(通常为两个表)之间的参照完整性,即构建于两个表的两个字段之间的参照关

    2024年02月12日
    浏览(25)
  • MySQL的多表操作-外键约束

    介绍 MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 如下图员工表中dept_id 表示员工属于哪个部门,员工表就是从表,部门表就是

    2024年02月07日
    浏览(36)
  • MySQL外键约束和多表查询

    知识点 示例 知识点 示例 准备数据 示例 知识点 示例 知识点 示例

    2024年02月04日
    浏览(50)
  • 【MySQL入门指南】外键约束使用详解

     MySQL是一种关系型数据库,现实中的业务往往是相互关联的,这也就决定了数据库中的表也是存在相互关系的。而表与表之间的相互关系就是通过外键来维护的。给大家举一个现实的例子来帮助理解:  现在我们需要在数据库中存放学生的选课信息。如果我们将课程具体信

    2024年02月01日
    浏览(41)
  • MySQL--删除表的外键约束,简单易懂。

    删除表的外键约束 我们曾在第一章中讲过外键的作用,以及如何创建一个表的外键。建立了外键我们就建立起了两张表的关联关系,那如果我想删除主表呢?为了确保数据库的正确性,我们必须先解除两个表之间的关联关系,那就是删除外键约束啦!让我们先来看看删除外键

    2024年04月17日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包