MySQLDay11(索引 dba命令 三范式 一对一 一对多 多对多)

索引
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、实际开发
    在实际开发中尽量遵循三范式
    但是还是根据实际情况进行取舍
    有时可能拿冗余换速度
    最终目的是满足客户需求
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值