MySQL的语句查询——索引与外键
一、索引的介绍
1、什么是索引?
(1)定义:索引是一种数据结构
一个索引在存储的表中约束数据结构;
a、索引是在表的字段上创建的
b、索引包含了一列值,这个值保存在一个数据结构中
2、索引的作用
(1)保证数据记录的唯一性
(2)实现表与表之间的参照性
(3)减少排序和分组的时间(例如在使用order by ,group by 查询语句中进行数据检索)
(4)可以使用索引快速访问数据库中指定信息
3、索引的缺点
(1)索引要占物理内存
(2)索引对表进行增删改查,索引要动态维护,降低数据的维护速度
4、索引的分类
(1)普通索引:index
简称:mul;最基本的索引,没有任何限制
(2)主键索引:primary key
简称:pri;是一种唯一索引,不能为空
(3)唯一索引:unique
简称:uni;是一种唯一索引,可为空,一个表中可以有多个唯一索引
5、详解讲解
(1)查看索引
方法1:show INDEX from student ;
方法2:show keys from student ;
(2)通过查看表结构,是否有索引:desc student ;
(3)创建普通索引
a、创建普通索引 的简写是mul
-索引名和字段名不一样-
格式:alter table 表名 add INDEX 索引名(字段名)
案例:alter table student add INDEX sy(stu_name)
b、创建索引索引名和字段一致
格式:alter table 表名 add INDEX (字段名)
案例:alter table student add INDEX (stu_name)
(4)删除普通索引
格式:ALTER table 表名 drop index 索引名;
案例:ALTER table student drop index sy;
(5)创建主键索引(主键简写:pri)
格式:ALTER table 表名 add PRIMARY key(字段名)
案例:ALTER table student add PRIMARY key(stu_no)
(6)删除主键索引
格式:ALTER table 表名 drop PRIMARY key
案例:ALTER table student drop PRIMARY key
(7)添加唯一索引(unique ;唯一索引简写:uni)
a、添加唯一索引:索引名和字段名不一致
格式:ALTER table 表名 add unique 索引名(字段名)
案例:ALTER table student add unique yy(age)
b、添加唯一索引:索引名和字段名一致
ALTER table student add unique (edit)
作业:
1、什么是索引?
2、索引的作用
3、索引有哪些?
4、如何创建索引?
5、主键索引和唯一索引的区别?
一、外键的介绍
1、外键的定义
让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。
2、外键的作用
保持数据的一致性和完整性
3、msyql 数据库中的存储引擎?
myisam (默认)
innodb (外键需要用到innodb存储格式)
4、查看存储引擎
格式:show table status from 库名 where name='表名' ;
案例:show table status from hh where name='student' ;
5、存储方式:myisam(默认)
6、查看外键方法:
(1)在navicat中查看
(2)查看外键
show create table student;
二、外键的运用
1、建表时创建外键
(1)创建 engine=INNODB 格式
格式:CREATE table 表名 (字段名 字段类型(字符长度) PRIMARY key , 字段名 字符类型(字符长度) ,constraint 外键名 FOREIGN key(子表字段)REFERENCES 父表(父表字段)) engine=INNODB ;
案例:
#父表
create table ss (id int(10) PRIMARY key, name varchar(20) )ENGINE=INNODB ;
#子表
CREATE table cc (cid int(10) PRIMARY key ,cname VARCHAR(20) ,constraint wj FOREIGN key(cid)REFERENCES ss(id)) engine=INNODB ;
constraint:外键名(指定外键名)
foreign key:子表字段(指定字段)
references:父表(父表字段)——引用外部表的主键
2、建表以后再添加外键
格式:alter TABLE 子表 add CONSTRAINT 外建名 FOREIGN key (子表字段) REFERENCES 父表(父表字段)
#父表
create table xx (id int(10) PRIMARY key ,name varchar(20))engine=INNODB ;
#子表
create table yy (yid int(10) PRIMARY key ,yame varchar(20))engine=INNODB ;
添加外键:alter TABLE yy add CONSTRAINT wjm FOREIGN key (yid) REFERENCES xx(id)
-格式:show create table 表名;-
-案例:show create table cc-
3、删除外键
格式:ALTER TABLE 表名 drop FOREIGN key 外键名;
案例:ALTER TABLE yy drop FOREIGN key wj1;

4、外键的特点
(1)当父表不存在的数据,子表也无法插入数据(子表无法插入数据)
(2)父表中存在的数据,子表就可以插入数据(插入数据)
(3)删除数据,子表中存在的数据,直接删除父表是无法删除 (要先删除子表数据,再删除父表数据)
(4)删除父表的数据,先删除子表,再删除父表
作业:
1、什么是外键?
2、外键作用?
3、如何创建外键?
4、如何删除外键
5、公司中为什么使用外键?
(1)保存数据的一致性和完整性
(2)公司数据量大,造成数据重复,新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表,子表单一化,避免数据的冗余
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!