数据库的索引与试图与触发器

数据库的索引与试图与触发器

本章知识点

索引介绍

索引的设立

试图介绍

试图的设立

触发器定义

触发器编写

数据库备份

知识点讲解

索引介绍

查询复杂度:查询的次数,测试复杂度,采用的是悲观态度。复杂度用O(x)表示

常规的查询,顺序查询:安装顺序,查询到结果为结束。复杂度为O(n)。

排序的目的时候为了高效的查询

对于mysql任意一张表,常规使用的查询方法也是顺序查寻。

树结构:

节点

内部节点

叶子节点

`

根 A

内部节点 A B C

叶子节点 D E F G

Mysql为了优化查询,提出索引概念。

当用户创建索引的时候,mysql首先复制数据,完成一个新的Btree(平衡树)数据结构,mysql 索引默认用的时候B+tree结构。

平衡树:左树和右树高度相差不能高过1。

1、有一个根节点,根节点为空或者有一个记录和有两个子节点。

2、每个节点当做key和指针相互分割,指针指向子节点。

 

3、d表示数的宽度,除叶子节点之外,其他每个节点有[d/2,d-1]条数据,而且key从左到又从小到 大排列。

4、在一个节点当做,第n个子树所有key,小于这个节点当做的第n个key,大于这个节点当做的 第n-1个key。

5、所有的叶子节点必须在同一层次

用二分查找O(logn)

索引时候数据结构,可以加快我们查询的效率,但是创建索引需要复制数据,会占用资源。

使用索引的区间:

当我们使用索引后,查询指定数据返回的数据是总数据的3%-5%我们认为是合适的。

少量数据不适合用索引。

索引的设立

索引分类:

普通索引 就是一个普通的索引,可以为空,可以重复。

     ALTER TABLE teacher ADD INDEX(column);

 

唯一索引 可以为空,不可以重复。

ALTER TABLE teacher ADD UNIQUE(column);

ALTER TABLE teacher ADD column type UNIQUE;

 

主键索引 不可以为空,不可以重复。

ALTER TABLE teacher ADD PRIMARY KEY(column);

只要是主键,就是索引。

多列索引。

  ALTER TABLE teacher ADD INDEX(column1,column2,column3);

 

使用索引:

1、少量数据不使用数据

2、查询次数少不使用索引

3、查询要携带索引字段,通常放在select之后第一个

4、索引提高了查询的效率,占有跟多的资源。

试图介绍

View:当查询的复杂度比较大,多表,多关系,会导致查询语句混乱,不利于sql语句的编写和编 写的sql语句的可读性。于是mysql推出了试图模式。

试图模式是对一个查询的结果进行记录,试图里面只存放语句,不存放结果,类似于虚表。

试图优点:

1、简单,试图构建了一个虚拟的逻辑表,这个表里面的数据来自于指定的查询,而查询可 以是多表联查。在使用的时候,我们可以直接对试图表里面的数据进行查询,不用从原始 表查。

2、安全,数据库有权限设置,但是没有对行和列的权限。所以如果对一个表里的数据设置 不同的权限,mysql本身的权限设置有些不够,我们用试图查询出用户需要的数据,用户基 于试图进行查询。

3、数据独立,一旦试图试图的结构决定,可以屏蔽表结构变化给用用户带来的影响,在原 表当做增加一列。

试图的缺点:

试图会降低查询的效率。尤其在试图当做的查询当做再次使用试图。

试图的设立

需求:

查询所有姓孙的女生

创建

查询所有姓孙的学生

select * from student where name like "孙%"

然后将该查询形成视图

CREATE VIEW student_sun AS (select * from student where name like "孙%");

 

 

 

使用

 

交友网站对用户联系方式进行限制(没有18888,不要联系我)。

1、创建试图,查询所有用户的个人信息(残缺版)

 

2、从残缺版里查询所有女生。

 

查看所有试图

SHOW TABLE STATUS WHERE COMMENT=”view”;

 

删除试图

DROP VIEW student_sun;

 

触发器定义

Trigger

事件绑定的过程

以前端js/jq为例子

捕获对象

Document.getElementById

$(“#”)

编写条件

触发条件

Click()

Blur()

判断条件

If(条件){

block

}

执行函数

Function(){

}

当某个事物满足某个条件触发某个功能

触发器编写

以tab1和tab2做为案例

当tab1被插入的时候,自动插入数据到tab2

Tab1

 

Tab2

 

创建触发器:

DELIMITER || 声明mysql的结束符,默认结束符是;

CREATE TRIGGER tb2_auto_add AFTER INSERT

ON tb1 FOR EACH ROW

BEGIN

Insert into tb2(name,age) value(“老王”,18);

end

||

DELIMITR ;声明mysql的结束符,默认结束符是;

 

测试效果

 

触发器的语句分析

CREATE TRIGGER tb2_auto_add AFTER INSERT

ON tb1 FOR EACH ROW

BEGIN

Insert into tb2(name,age) value(“老王”,18);

end

Create 创建

Trigger 触发器

Tb2_auto_add 触发器名称,必须有意义

AFTER 触发时间

AFTER在触发事件之后

BEFOR 在触发器之前

INSERT 触发的条件

UPDATE 更新事件

DELETE 删除事件

INSERT 插入事件

EACH ROW 任意一行

BEGIN 开始编写触发事件

Insert into tb2(name,age) value(“老王”,18); 触发的事件

END 触发事件结束

查看触发器

触发器的信息都被存放在information_schema数据库当做的triggers表当中

Select * from information_schema.triggers;

查看触发器

Drop trigger tirggerName

 

使用触发器之前一定要确定数据库关系可以不可以完成需求。

DELIMITER ;

在触发器当中,NEW变量代表触发表。

DELIMITER ||

 create trigger tb5_add_tb3_id_1 after insert ON tb3

 for each row

 begin

 insert into tb5(tb3_id) value(NEW.id);

 end

||

DELIMITER;

1、安全考虑,考虑到数据被修改的权限问题,我们用触发器代替用户 来修改数据

2、审计功能,对前端操作进行审计

3、实现业务规则

4、同步数据

5、用于科学计算,做数学统计

(1) 三门课

(2) 语文 数学 英语

(3) 任意两门课 成绩大于 90 优秀

(4) 任意两门课 成绩大于 80 良好

(5) 任意两门课  差

数据库备份

数据库的导入和导出

mysqldump

导出数据库

mysqldump -u root -p database table > *.sql

 

 

导入

Mysql -u 用户名 -p 数据库名称 < 数据库文件

 

不在mysql内部执行

知识点回顾

索引介绍

索引的设立

试图介绍

试图的设立

触发器定义

触发器编写

数据库备份

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值