iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >一文彻底搞清楚MySQL的主键、外键、约束和各种索引
  • 478
分享到

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

mysql数据库sql约束索引 2023-08-23 11:08:58 478人浏览 八月长安
摘要

0.前言 主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询。 文章目录 0.前言1. 主键1.1. 在创建表时定义主键1.2. 在已有表中添加主键 2. 外键

0.前言

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

在这里插入图片描述


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中主键、外键、约束和索引的概念和用法。在实际应用中,应根据具体情况选择合适的主键、外键、约束和索引,以提高数据的完整性和一致性,加速查询。


在这里插入图片描述

来源地址:https://blog.csdn.net/m0_63947499/article/details/131095865

您可能感兴趣的文档:

--结束END--

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

本文链接: https://www.lsjlt.com/news/378585.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作