MySQL 11章_索引、触发器
一、 索引:
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;
MySQL 11章_索引、触发器的更多相关文章
- MySQL数据库优化_索引
1.添加索引后减少查询需要的行数,提高查询性能 (1) 建表 CREATE TABLE `site_user` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '自增 ...
- MySQL 05章_模糊查询和聚合函数
在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...
- 全国计算机等级考试二级教程-C语言程序设计_第11章_对函数的进一步讨论
无论传递什么参数,函数都有副本机制 改变一个变量,需要传入变量的地址 改变一个指针变量,需要传入指针变量的地址 //int add(int a, int b);挖取函数声明 //int ()(int ...
- java oop第11章_反射、BaseDao的进一步改造
引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一. Class类: Class类用 ...
- MySQL 10章_视图、事务
一. 视图: 视图(view)是保存了查询语句的一种数据库对象,其数据来源是查询语句对应的数据表,他的结果与数据表查询的结果一样也是一张虚拟的数据表 . 为什么需要视图: ) 不同的用户关心的数据可能 ...
- mysql 03章_完整性、约束
.完整性:数据库中数据的可靠性有效性和合理性我们称为数据的完整性,这样才能保证数据合理符合现实生活中的数据体现. 注:数据完整性的设计应该在设计表的时候就进行设计了,而不是等到数据库中已经存在数据才进 ...
- MySQL 08章_数据库设计
一. 关系模型与对象模型之间的对应关系 序号 关系模型:数据库 对象模型:java程序 1 数据表table 实体entity:特殊的java类 2 字段field 属性attribute/字段fie ...
- MySQL 07章_子查询
子查询就是查询中还可以嵌套其他的查询,通常是内层查询的结果作为外层查询的条件来使用 执行循序,自内向外依次执行 一.内层查询返回“单列单行”的结果 -- 1.查询宋江的出生日期 SELECT TIME ...
- mysql 06章_分组查询和链接查询
一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...
随机推荐
- 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_自定义控件--主要用于画面拖拽效果)
如题,需求:在某个图片上用户可以手动指定位置. 如下: 中心思想:仿照Visual Studio工具中的控件的做法 如何仿照呢? 1.自定义的控件类继承System.Windows.Forms.Con ...
- LeetCode 最小栈
题目链接:https://leetcode-cn.com/problems/min-stack/ 题目大意 略.并且题目中要求的操作都要 O(1) 实现. 分析 用 2 个栈,一个普通栈,一个单调栈. ...
- SOA(面向服务的体系结构)
SOA(面向服务的体系结构) 面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务 ...
- Python移动自动化测试面试✍✍✍
Python移动自动化测试面试 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- el-scrollbar 如何去掉横线滚动条?
1. el-scrollbar style="height:100%" 2. 不要在scoped私有变量添加 .el-scrollbar__wrap{ overflow-x: hi ...
- usb-host与外设之间的通信(一)
迫于需要开始一个app实现安卓手机控制外设,要学习一下usb-host这方面的知识,所以记录一下自己的学习经历.关于usb-host这一块的资料国内还是比较少的,我只能学到哪里就记录到哪里了. 简单来 ...
- boost 大小端转换
boost 中有一个edmian 里面有转换函数模板 native_to_little<T> 本地转换为小端 native_to_bit<T> 本地转换为大端
- 深入研究js中的位运算及用法
什么是位运算? 位运算是在数字底层(即表示数字的 32 个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序 ...
- windows下安装jenkins初级(1)
这里是基于Windows系统下安装Jenkins 首先下载jenkins 下载地址:https://jenkins.io/download/ 选择所需要的系统 我这里选择Windows 开始安装 一直 ...
- python pillow模块用法
pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持pytho ...