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)公司数据量大,造成数据重复,新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表,子表单一化,避免数据的冗余

posted @   uai  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示