索引
1、什么是索引
索引对应的英语单词为:index
索引相当于一本字典的目录,索引的作用是提供程序的检索【查询】效率
索引被用来快速找出在一个列上用一特定值的行,没有索引,MySQL不得不首先以第一条开始,然后读完整个表直到它找出相关的行。
表越大,花费时间越多,对于一个有序字段,可以运用二分查找,性能能得到本质上的提高,MYISAM和INNODB都是用B+Tree作为索引结构
主键,unique都会默认的添加索引
2、主键自动添加索引,所以能够通过主键查询尽量通过主键查询,效率较高。
3、索引和表相同,都是一个对象,表是存储在硬盘文件中的,那么索引是表的一部分,索引也是存储在硬盘文件中的。
4、在MySQL数据库管理系统中,对表中记录进行检索的时候,通常包括几种检索方式。
第一种方式:全表扫描【效率较低】
假设有一张表:emp表
select * from emp where ename='wang';
若ename字段上没有添加索引,
那么在通过ename字段过滤数据的时候,
ename字段会被全部扫描
第二种方式:通过索引进行检索【提高查询效率】
5、一张表中有多个字段,每一个字段都是可以添加索引的。
6、什么情况适合给表中的某个字段添加索引?
该字段数据量庞大
该字段很少的DML操作【DML操作很多的话,索引也需要不断的维护,效率反而降低】
该字段经常出现在where条件中
7、怎么创建索引
create index dept_dname_index on dept(dname);
create unique index dept_dname_index on dept(dname);//添加unique表示dept表中的dname字段添加一个唯一性约束
8、怎么删除索引
drop index dept_dname_index on dept;
DBA命令
1、新建用户
create user username identified by 'password';
--可以登录但是只可以看见一个库 information_schema
2、授权
grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option;
首先用root用户进入mysql,然后键入:grant select,insert,update,delete on *.* to abc@localhost identified by '123';
如果希望该用户能够在任何机器上登录mysql,则将localhost改为'%'
3、回收权限
revoke privileges on dbname[.tbname] from username;
revoke all privileges on *.* from abc;
修改密码
update user set password = password('111') where user = 'abc';
刷新权限:
flush privileges
视图
1、什么是视图
视图是一种根据查询(也就是select表达式)定义的数据库对象,用于获取想要看到和使用的局部数据
视图有时也被称为“虚拟表”
视图可以被用来从常规表(称为“基表”)或其他视图中查询数据
相当于从基表中直接获取数据,视图有以下好处
访问数据变得简单
可被用来对不同用户显示不同的表的内容
用来协助适配表的结构以适应前端现有的应用程序
视图作用:
提高检索效率
隐藏表的实现细节【面向视图检索】
视图可以隐藏表的细节
mysql是个命令行程序;
mysqld是服务,一般linux系统里的服务都是以d结尾的,比如httpd,vsftpd等等。
d的全拼应该是daemon,也就是守护程序的意思,常驻后台。
导出导入
1、导出整个数据库
mysqldump database>d:\xxx.sql -uroot -proot
2、导出指定库下的指定表
mysqldump database emp>d:\xxx.sql -uroot -proot
3、导入
source d:\xxx.sql
数据库设计三范式
1、第一范式
要求有主键,并且要求每一个字段原子性不可再分
每一行必须唯一,也就是每个表必须有主键,数据库设计的最基本要求。主要通常采用数值型或定长字符串表示。关于列不可再分,应更具具体的情况来决定。如联系方式,为了开放上的便利性可能就采用一个字段
2、第二范式
要求所有非主键字段完全依赖主键,不能产生部分依赖
一般不能用联合主键 因为一般都会出现仅依赖其中一个主键
3、第三范式
所有非主键字段和主键之间不能产生传递依赖
4、几个经典的设计
一对一:
第一种方案:分两张表存储,共享主键
t_husband
hno(pk) hname
1 zhang
2 li
3 liu
t_wife
whn(pk) wname 【wnoon更是也是fk 引用t_husband的hno】
1 a
2 b
3 c
第二种方案:分两张表存储,外键唯一
t_husband
hno(pk) hname wifeno(fk-unique)
1 zhang 100
2 li 200
3 liu 300
t_wife
whn(pk) wname
100 a
200 b
300 c
一对多:
分两张表存储,在多的一方添加外键,这个外键字段引用一的一方中的主键字段
多对多:
分三张表存储,在学生表中存储学生信息,在课程表中存储课程信息,在学生课表中存储学生
5、实际开发
在实际开发中尽量遵循三范式
但是还是根据实际情况进行取舍
有时可能拿冗余换速度
最终目的是满足客户需求
MySQLDay11(索引 dba命令 三范式 一对一 一对多 多对多)
最新推荐文章于 2023-08-16 23:45:44 发布