作者:mobiledu2502852915 | 来源:互联网 | 2024-10-20 11:07
篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL 索引触发器相关的知识,希望对你有一定的参考价值。
一、 索引:
1、 为什么要使用索引:
一本书需要目录能快速定位到寻找的内容,同理,数据表中的数据很多时候也可以为他们创建相应的“目录”,称为索引,当创建索引后查询数据也会更加高效
2、 mysql中的索引类型:
1) 普通索引:在不添加任何关键字的情况下创建的索引,他没有其他特殊功能,就是为了提高查询效率
2) 唯一索引:使用UNIQUE关键字标记,被添加唯一索引的字段值不重复
3) 全文索引:使用FULL TEXT关键字标记,MYSQL在针对一些数据量较大的字段建议创建全文索引,以便在查询时检索更快
注:全文索引只能在myisam相关的数据库引擎使用,MySQL默认的数据库引擎innodb是不支持全文索引的
3、 创建索引:
1) 在创建数据表结构时就使用关键字创建唯一索引:UNIQUE关键字
2) 使用CREATE INDEX语句完成:
语法:
create {不写 | UNIQUE | FULLTEXT} index <索引名称> ON 表名(字段名列表)
举例:-- 在tb_student表的student_name上添加唯一索引
CREATE UNIQUE INDEX inx_student_name_u ON tb_student (student_name);
-- 查看索引
show index from tb_student ;
3) 在修改数据表时为其添加索引的方式完成:
语法:
ALTER TABLE <表名> ADD {不写 | UNIQUE | FULLTEXT} INDEX <索引名> (字段名列表)
举例:
-- 在tb_student2中的address字段上创建全文索引。
-- 从tb_student复制一份新表tb_student2
CREATE TABLE tb_student2 SELECT * FROM tb_student;
SELECT * FROM tb_student2;
-- 创建全文索引 需要将数据表的引擎修改为myisam
ALTER TABLE tb_student2 ADD FULLTEXT INDEX inx_address_f (address);
show INDEX FROM tb_student2;
4) 查看索引:
语法:SHOW INDEX FROM <表名>
举例:SHOW INDEX FROM tb_student;
5) 删除索引
语法:DROP INDEX <索引> ON <表名>
举例:DROP INDEX inx_address_f ON tb_student2;
*:针对记录的CRUD操作语句:
Insert into,delete,update,select
*:针对数据库对象的CRUD操作语句:
create,drop,alter,show
二、 触发器:
1、 什么是触发器?
当满足设定好的条件时会自动执行事先设定好的任务的一种数据库对象,称为触发器。
2、 触发器的几个要素:
1) 触发地点:具体是针对哪个数据表创建触发器
2) 触发事件:具体是执行什么操作(增删改)时会启动触发器
3) 触发时机:具体是在操作之前还是之后启动触发器
3、 创建触发器:
语法:
CREATE TRIGGER <触发器名>
{befor | after} /*触发时机*/
{INSERT | DELETE | UPDATE} /*触发事件*/
ON <表名> /*触发地点*/
For each row /*固定写法:针对每一行都生效*/
Begin
#为触发器事先设定的要执行的任务
End;
说明:在触发器中的取值需要通过OLD或NEW关键字来获取字段的“老值”、“新值”。
举例:
delimiter //
CREATE TRIGGER trig_studentscore
BEFORE INSERT ON tb_score
FOR EACH ROW
BEGIN
IF NEW.student_score < 0 THEN
SET NEW.student_score = 0;
ELSEIF NEW.student_score > 100 THEN
SET NEW.student_score = 100;
END IF;
END //
delimiter ;
-- 执行触发器中对应的触发事件,启动触发器,验证触发器是否正常工作
INSERT INTO tb_score VALUES(null,"S08",2,-3.3,‘2019-10-11‘);
INSERT INTO tb_score VALUES(null,"S08",2,80.5,‘2019-10-11‘);
INSERT INTO tb_score VALUES(null,"S08",2,120,‘2019-10-11‘);
SELECT * FROM tb_score WHERE student_no = ‘s08‘;
DESC tb_score;
-- 查看当前数据库下的所有触发器
SHOW TRIGGERS;