ToB企服应用市场:ToB评测及商务社交产业平台

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

作者: 星球的眼睛    时间: 2024-6-15 01:19
标题: 一文彻底搞清楚MySQL的主键、外键、约束和各种索引
0.前言

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


  

1. 主键

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

主键可以用于加速查询和提高数据的完整性和安全性。在Mysql中,主键可以通过以下两种方式界说:
1.1. 在创建表时界说主键

在创建表时,可以通过在列界说反面添加PRIMARY KEY关键字来界说主键。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,id列被界说为主键。
1.2. 在已有表中添加主键

在已有表中添加主键,可以利用ALTER TABLE语句。比方:
  1. ALTER TABLE `users` ADD PRIMARY KEY (`id`);
复制代码

2. 外键

外键是一种用于创建表与表之间关联关系的机制。外键可以用于保证数据的完整性和同等性。在Mysql中,外键可以通过以下两种方式界说:
2.1. 在创建表时界说外键

在创建表时,可以通过在列界说反面添加FOREIGN KEY关键字来界说外键。比方:
  1. CREATE TABLE `orders` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `user_id` int(11) NOT NULL,
  4.   `product_id` int(11) NOT NULL,
  5.   `quantity` int(11) NOT NULL,
  6.   PRIMARY KEY (`id`),
  7.   FOREIGN KEY (`user_id`) REFERENCES `users`(`id`),
  8.   FOREIGN KEY (`product_id`) REFERENCES `products`(`id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,orders表中的user_id和product_id列被界说为外键,分别引用了users表和products表中的id列。
2.2. 在已有表中添加外键

在已有表中添加外键,可以利用ALTER TABLE语句。比方:
  1. ALTER TABLE `orders` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`);
复制代码

3. 约束

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

NOT NULL约束用于限制列中的数据不能为NULL。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,name和email列被界说为NOT NULL。
3.2. UNIQUE约束

UNIQUE约束用于限制列中的数据不能重复。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL UNIQUE,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,email列被界说为UNIQUE。
3.3. CHECK约束

CHECK约束用于限制列中的数据必须满足指定的条件。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `age` int(11) NOT NULL,
  5.   CHECK (`age` >= 18),
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,age列被界说为CHECK约束,要求age的值必须大于等于18。
3.4. DEFAULT约束

DEFAULT约束用于指定列的默认值。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL,
  5.   `status` tinyint(1) NOT NULL DEFAULT 0,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,status列被界说为DEFAULT约束,如果插入数据时没有指定status的值,则默认为0。

4. 索引

索引是一种用于加速查询的机制。在Mysql中,索引可以用于提高查询服从和保证数据的完整性和同等性。Mysql支持以下几种索引:
4.1. PRIMARY KEY索引

PRIMARY KEY索引是一种用于唯一标识表中每一行数据的索引。在Mysql中,每个表只能有一个PRIMARY KEY索引。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,id列被界说为PRIMARY KEY索引。
4.2. UNIQUE索引

UNIQUE索引是一种用于限制列中的数据不能重复的索引。在Mysql中,每个表可以有多个UNIQUE索引。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL UNIQUE,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,email列被界说为UNIQUE索引。
4.3. INDEX索引

INDEX索引是一种用于加速查询的索引。在Mysql中,每个表可以有多个INDEX索引。比方:
  1. CREATE TABLE `users` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(50) NOT NULL,
  4.   `email` varchar(50) NOT NULL,
  5.   INDEX `idx_name` (`name`),
  6.   INDEX `idx_email` (`email`),
  7.   PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,name和email列被界说为INDEX索引。
4.4. FULLTEXT索引

FULLTEXT索引是一种用于全文搜刮的索引。在Mysql中,每个表只能有一个FULLTEXT索引。比方:
  1. CREATE TABLE `articles` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `title` varchar(50) NOT NULL,
  4.   `content` text NOT NULL,
  5.   FULLTEXT INDEX `idx_content` (`content`),
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
上面的例子中,content列被界说为FULLTEXT索引。

5. 总结

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4