一、    索引:
  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章_索引、触发器的更多相关文章

  1. MySQL数据库优化_索引

    1.添加索引后减少查询需要的行数,提高查询性能 (1) 建表 CREATE TABLE `site_user` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '自增 ...

  2. MySQL 05章_模糊查询和聚合函数

    在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...

  3. 全国计算机等级考试二级教程-C语言程序设计_第11章_对函数的进一步讨论

    无论传递什么参数,函数都有副本机制 改变一个变量,需要传入变量的地址 改变一个指针变量,需要传入指针变量的地址 //int add(int a, int b);挖取函数声明 //int ()(int ...

  4. java oop第11章_反射、BaseDao的进一步改造

      引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一.       Class类: Class类用 ...

  5. MySQL 10章_视图、事务

    一. 视图: 视图(view)是保存了查询语句的一种数据库对象,其数据来源是查询语句对应的数据表,他的结果与数据表查询的结果一样也是一张虚拟的数据表 . 为什么需要视图: ) 不同的用户关心的数据可能 ...

  6. mysql 03章_完整性、约束

    .完整性:数据库中数据的可靠性有效性和合理性我们称为数据的完整性,这样才能保证数据合理符合现实生活中的数据体现. 注:数据完整性的设计应该在设计表的时候就进行设计了,而不是等到数据库中已经存在数据才进 ...

  7. MySQL 08章_数据库设计

    一. 关系模型与对象模型之间的对应关系 序号 关系模型:数据库 对象模型:java程序 1 数据表table 实体entity:特殊的java类 2 字段field 属性attribute/字段fie ...

  8. MySQL 07章_子查询

    子查询就是查询中还可以嵌套其他的查询,通常是内层查询的结果作为外层查询的条件来使用 执行循序,自内向外依次执行 一.内层查询返回“单列单行”的结果 -- 1.查询宋江的出生日期 SELECT TIME ...

  9. mysql 06章_分组查询和链接查询

    一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...

随机推荐

  1. https://blog.csdn.net/rubbertree/article/details/88877262

    本文链接:https://blog.csdn.net/rubbertree/article/details/88877262 https://blog.csdn.net/mingtianhaiyouw ...

  2. LeetCode 分隔链表

    题目链接:https://leetcode-cn.com/problems/partition-list/ 题目大意 略. 分析 空间复杂度 O(1) 的做法蛮有意思的,另外加头结点可以少写很多代码. ...

  3. 面向对象(五)——isinstance与issubclass、反射、内置方法

    isinstance与issubclass.反射.内置方法 一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,cla ...

  4. VC++ 2010 创建高级Ribbon界面详解(4)

    5.辅助控件 除了前面我们介绍的按钮,工具栏,编辑框等基本控件外,为了支持现代软件对丰厚的界面交互方式的要求,Visual Studio 2010还提供了很多其他的辅助控件,例如我们通常会用到的“上一 ...

  5. scala 集合类型

    Iterable 是序列(Seq), 集(Set) 映射(Map)的特质 序列式有序的集合如数组和列表 集合可以通过== 方法确定对每个对象最多包含一个 映射包含了键值映射关系的集合 列表缓存: 使用 ...

  6. python 中 random模块的用法

    import random print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 print( random.random() ) # 产生 0 到 ...

  7. 52-Ubuntu-打包压缩-2-打包/解包

    tar是Linux中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以把一个打包的大文件恢复成一系列文件. 序号 命令 作用 01 tar -cvf 打包文件.tar 被打包文件 打包 ...

  8. 【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)

    [解题思路] 给一张神图,推理写的灰常明白了,关键是构造共轭函数,这一点实在是要有数学知识的理论基础,推出了递推式,接下来就是矩阵的快速幂了. 神图: 给个大神的链接:构造类斐波那契数列的矩阵快速幂 ...

  9. SingalR 构建 推送服务器初探

    项目需要用到推送,于是重新研究了下推送框架,最好能够独立成一个服务,与业务无关的服务,可以给所有的项目通用.找了好久最终决定用SinglR 框架. Signal 是微软支持的一个运行在 Dot NET ...

  10. (Struts2学习系列一)MyEclipse创建第一个struts2项目

    点击MyEclipse菜单栏File按钮,点击new-->Web Project 输入Project name之后点击Finish 项目创建完成. 然后右键项目,点击MyEclipse--> ...