当前位置: 首页>前端>正文

pd相同的索引放在一起 索引允许重复吗

一、数据库索引

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

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

1、索引分类:

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

ALTER TABLE student ADD INDEX(name);

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python,第1张

②唯一索引 可以为空,不可以重复(值不可重复)

ALTER TABLE student ADD UNIQUE(name);

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据_02,第2张

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据_03,第3张

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

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

ALTER TABLE student ADD PRIMARY KEY(id);

④多列索引

这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。

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

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_主键_04,第4张

2、删除索引

DROP INDEX name ON student;

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据_05,第5张

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

`

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_06,第6张

3、查看索引

SHOW INDEX FROM student;

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据_07,第7张

二、数据库视图

视图

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

视图的优点

1、简单,视图构建了一个虚拟的逻辑表,这个表的数据来源于指定的查询,而查询可以是多表,在使用的时候直接使用虚表代替复杂的查询。

2、安全,数据库有权限设置,但是没有对行和列进行设置的。所以,对同一个表当中完整的数据是否展示就是问题了。

3、数据独立,就相当于在原表的基础上加一列。

视图的缺点

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

1、创建视图

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

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python_08,第8张

2、查看视图

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

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据_09,第9张

3、使用视图

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python_10,第10张

4、删除视图

DROP VIEW student_view;

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_11,第11张

三、触发器

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

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_12,第12张

例如:

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

以major和course表为例子

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_13,第13张

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_主键_14,第14张

1、创建触发器流程

①修改msyql的语法结束符

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

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python_15,第15张

②设置触发器

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

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

BEGIN 开始执行

INSERT INTO course(NAME)

VALUE

("hello");

END|| 触发器设置结束

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_pd相同的索引放在一起_16,第16张

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

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

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_17,第17张

④触发触发器

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_18,第18张

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python_19,第19张

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_触发器_20,第20张

2、查看触发器

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\G;

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python_21,第21张

3、删除触发器

DROP TRIGGER major_auto_add;

pd相同的索引放在一起 索引允许重复吗,pd相同的索引放在一起 索引允许重复吗_数据库触发器调用python_22,第22张

注意:

!!尽量少使用触发器,不建议使用。

假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500次触发器,光是触发器执行的时间就花费了500s,而insert 500条数据一共是1s,那么这个insert的效率就非常低了。因此我们特别需要注意的一点是触发器的begin end;之间的语句的执行效率一定要高,资源消耗要小。

触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。

BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后。

FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次。

tigger_event详解:

①INSERT型触发器:插入某一行时激活触发器,可能通过INSERT、LOAD DATA、REPLACE 语句触发(LOAD DAT语句用于将一个文件装入到一个数据表中,相当与一系列的INSERT操作);

②UPDATE型触发器:更改某一行时激活触发器,可能通过UPDATE语句触发;

③DELETE型触发器:删除某一行时激活触发器,可能通过DELETE、REPLACE语句触发。

trigger_order是MySQL5.7之后的一个功能,用于定义多个触发器,使用follows(尾随)或precedes(在…之先)来选择触发器执行的先后顺序。

创建只有一个执行语句的触发器

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;

创建有多个执行语句的触发器

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件

ON 表名 FOR EACH ROW

BEGIN

执行语句列表

END;


https://www.xamrdz.com/web/2a21934869.html

相关文章: