• 数据库索引与视图触发器

索引

是一种特殊的数据结构,它包含了对数据表里的记录的指针,添加索引可以加速查询。类似于字典的目录。我们创建索引,会创建出一个特殊的文件来存储,所以我们对查询频繁的表或者字段添加索引。

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

索引分类:

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

ALTER TABLE student ADD INDEX(name);

数据库中索引能创建几个 数据库索引可以重复吗_数据

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

ALTER TABLE student ADD UNIQUE(name);

数据库中索引能创建几个 数据库索引可以重复吗_数据_02

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

主键本身就是主键索引,我们创建表,添加了主键,就相当于添加了主键索引

ALTER TABLE student ADD PRIMARY KEY(id);

多列索引

ALTER TABLE student ADD INDEX(name,id,age);

数据库中索引能创建几个 数据库索引可以重复吗_数据_03

删除索引

DROP INDEX name ON student;

数据库中索引能创建几个 数据库索引可以重复吗_数据_04

DROP INDEX id ON student; 删除复合索引,需要删除创建索引时候的第一个字段

数据库中索引能创建几个 数据库索引可以重复吗_数据_05

查看索引

SHOW INDEX FROM student;

数据库中索引能创建几个 数据库索引可以重复吗_触发器_06

 

视图

当查询的复杂度比较大,这里指的是多字段,多关系的查询,会导致查询混乱。不利于sql语句的编写,sql语句的可读性,会影响到的是sql的拼接。视图模式就是对查询结果进行记录,视图当中只存放语句,不存放结果,类似于虚表。

视图的优点

  1. 简单,视图构建了一个虚拟的逻辑表,这个表的数据来源于指定的查询,而查询可以是多表,在使用的时候直接使用虚表代替复杂的查询。
  2. 安全,数据库有权限设置,但是没有对行和列进行设置的。所以,对同一个表当中完整的数据是否展示就是问题了。
  3. 数据独立,就相当于在原表的基础上加一列。

视图的缺点

视图会降低查询的效率,尤其是嵌套视图

创建视图

CREATE VIEW student_view AS (SELECT id,name,age FROM student);

数据库中索引能创建几个 数据库索引可以重复吗_主键_07

查看视图

SHOW TABLE STATUS WHERE COMMENT = “VIEW”\G;

数据库中索引能创建几个 数据库索引可以重复吗_数据_08

使用视图

数据库中索引能创建几个 数据库索引可以重复吗_主键_09

删除视图

DROP VIEW student_view;

数据库中索引能创建几个 数据库索引可以重复吗_触发器_10

触发器

触发器(trigger),也叫触发程序,是与表有关的命名数据库对象,触发器是一种特殊的存储过程,但是触发器不需要语句调用,也不需要手动启动,他有事件触发,事件包括INSERT,UPDATE,和DELETE语句,当指定表发生指定动作,将激活触发器。

例如:

Tb1插入姓名,tb2 获取tb1的数据同时插入。

以major和course表为例子

数据库中索引能创建几个 数据库索引可以重复吗_数据库中索引能创建几个_11

数据库中索引能创建几个 数据库索引可以重复吗_主键_12

  1. 修改msyql的语法结束符。

DELIMITER ||将语法分割符修改为||

数据库中索引能创建几个 数据库索引可以重复吗_主键_13

  1. 设置触发器

CREATE TRIGGER major_auto_add AFTER INSERT ON major FOR EACH ROW

BEGIN

INSERT INTO course(NAME)

VALUE

("hello");

END||

数据库中索引能创建几个 数据库索引可以重复吗_触发器_14

CREATE TRIGGER major_auto_add  创建一个叫做major_auto_add的触发器

AFTER INSERT ON major FOR EACH ROW 在major的任意行发生插入事件之后

BEGIN 开始执行

INSERT INTO course(NAME)

VALUE

("hello");

END|| 触发器设置结束

 

 

  1. 将mysql的语法结束符修改回来。

DELIMITER ;将语法分割符修改为;

数据库中索引能创建几个 数据库索引可以重复吗_数据_15

  1. 触发触发器

数据库中索引能创建几个 数据库索引可以重复吗_触发器_16

数据库中索引能创建几个 数据库索引可以重复吗_数据_17

   

数据库中索引能创建几个 数据库索引可以重复吗_触发器_18

查看触发器

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\G;

数据库中索引能创建几个 数据库索引可以重复吗_数据库中索引能创建几个_19

删除触发器

DROP TRIGGER major_auto_add;

数据库中索引能创建几个 数据库索引可以重复吗_数据_20