MySQL中关于索引与触发器详解

1》索引的含义和特点:

    索引是什么,索引相当于字典里面的目录序表,比如查询一个“星”字,如果不按照拼音来找的话,那么我们需要把整个字典全部遍历查询一边。才能查到这个字,        如果按照拼音来找的,那么只需要在几页音序表中查询。就可以通过音序就快速查到,这个字在字典的哪一页。在数据库中,索引是建立在表上面的,索引可以很大程
     度上提高数据库的查询,同时也提高了数据库的性能,不同的存储引擎定义了索引的最大长度和索引的数量,所有的存储引擎对每个表最少支持16个索引,索引的长度      最少支持位256字节

         索引优点:
           其优点可以提高数据的检索速度,针对于有依赖关系的子表和父表,在联合查询的时候可以提高查询速度。
         索引的缺点:
           创建和维护索引需要消耗时间,索引需要占用物理空间,每一个索引都需要占用一定的物理空间,大量的索引会影响插入数据,数据库系统会按照索引进行排                   序,这样降低了插入数据的速度;
         解决办法:在插入数据时,先临时删除表的索引,然后插入数据,数据插入完成后,再创建索引。

2》索引的分类:
  Mysql的索引类型有:普通索引,唯一性索引,全文索引,单列索引、多列索引和空间索引等;

       1>普通索引
             创建普通索引时,不附加任何限制条件,,这类索引可以创建在任何的数据类型上面,
       2>唯一性索引
              使用unique参数可以设置唯一索引,在创建唯一索引时,限制该索引的值必须是唯一的。比如在student表中,user_name 字段设置为唯一索引的话,            那么此值必须是唯一的。
       3>全文索引
              使用fulltext参数可以设置为全文索引,全文索引只能创建char  varchar或者Text类型的字段上。只有MyISAM的存储引擎才支持此索引。Mysql5.6                       innodb开始支持全文索引
       4>单列索引
             在表中的单个字段上创建索引,单列索引只根据该字段进行索引。单列索引可以是、普通索引、也可以是唯一索引,还可以是全文索引。只要保证该索               引只对应一个字段即可。

       5>多列索引
            多列索引是在表的多个字段上创建一个索引,该索引指向创建时对应的多个字段。可以通过这几个字段进行查询。但是使用了多列索引,只有查询这些         字段中的第一个字段时才会被使用索引。比如:在表中id、name和sex字段上建立一个多列索引,那么,只有查询条件使用了id 字段时多列索引才会被使           用;
    6>空间索引
           使用spatial参数可以设置为空间索引, 空间索引只能建立在空间数据类型上,目前只有使用MyISAM存储引擎才支持空间索引。而且此索引的字段值不            能为空。
         练习:查询一下是否有其它类型的索引,
             Hash 索引主键索引 B-tree索引

3》如何设计索引:
      为了让索引使用效率更高,在创建索引时,必须考虑在那些字段上创建索引和创建什么类型的索引;
      1>唯一索引的设置:
            唯一索引的值是唯一的,可以更快速的通过该索引可以确定某条记录;
            比如:身份证号码是唯一的,可以建立唯一索引,如果是名字的话,那么有可能出现同名的状况,从而减低查询速度。
      2>为经常需要排序、分组和联合操作的字段建立索引:
             经常需要order by   group by  distinct和union等操作的字段,排序操作会浪费很多时间,如果为这些字段建立索引,可以有效地的避免排序操作;
      3>为常作为查询条件的字段建立索引:
             如果某一个字段常用需要来查询条件,那么该字段的查询速度影响这个张表的速度,因此为这样的字段建立索引,可以提高整张表的查询速度;
      4>限制索引的数目:
            索引的数目不是越多越好,每个索引都需要占用磁盘空间。索引越多,需要的磁盘空间就越大,修改表时,所索引的重构和更新麻烦,越多的索引更新          表就变得很浪费时间;
      5>尽量使用数据量少的索引:
            如果索引的值很长,那么查询的速度会受到影响,比如对一个Char(100)类型的字段进行全文索引需要的时间肯定要比char(10)类型的字段需要的时间更          多;
      6>删除不再使用和很少使用的索引:
            表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不在需要,DBA应该定期的找出这些索引,将它们删除,从而减少索引对           更新操作的影响;

4》如何创建索引

       语法:
         [unique|fulltext|spatial] index |key
         [别名] (属性名1  [(长度)]  [ASC|DESC] )
         unique可选参数,代表唯一索引
         fulltext 可选参数,代表全文索引
         spatial 可选参数,代表空间索引
         index 和key 用来指定字段为索引两者选择其一。
        别名可选参数,给创建的索引取新的名称。
        长度可选参数,给索引执定长度,必须是字符类型的才可以指定长度。
        ASC升序,DESC降序。

              1>创建普通索引
              

 Mysql->create table aatest(                                 id int,                                 name varchar(20),                                 sexboolean,                                 index(id));

                            使用 index设置id为普通索引。
              Mysql> show create table aatestG;  查看一下表详细结构
                Mysql>explain select * from aatest where id=1 G; 查看索引是否被使用。

                 2>建立唯一索
                 唯一索引使用unique进行约束
                

create table aatest2(                                          id int unique,                                            name varchar(20),                                          unique index aatest_id(id ASC));

Pic Copilot Pic Copilot

AI时代的顶级电商设计师,轻松打造爆款产品图片

Pic Copilot 158 查看详情 Pic Copilot

     3>创建全文索引
                   

 create table aatest3(                                                    id int,                                                    info varchar(20),                                                      fulltext index aatest3_info(info));

             *******5.6版本已支持全文索引

     4>创建单列索引
                   

 create table aatest4(                                                     id int,                                                      subject varchar(30),                                                     index aatest4_st(subject(10)));subject(10)指定索引的长度

               5>创建多列索引
                   多列索引,是在表上多个字段创建一个索引。
                   

  create table aatest5(                                                       id int,                                                         name varchar(20),                                                       sex char(4),                                                       index aatest5_ns(name,sex));

5》在已经有的表上建立索引:
       语法:
          create [unique | fulltext | spatial ] index 索引名
          on  表名 (属性名 [(长度)] [ ASC | DESC]);

          alter table 表名 ADD [unique | fulltext | spatial ] index 索引名
          (属性名 [(长度)] [ ASC | DESC]);

          1>创建普通索引
                

create index zytest_id  on zytest(id);                 alter table zytest add index zytest_id(id);

          2>创建唯一索引                

create unique index zytest1_id on zytest1(id);                 alter table zytest1 add unique index zytest1_id(id);

          3>创建全文索引            

 create fulltext index zytest2_id on zytest2(info);                 alter table zytest2 add fulltext zytest_2(info);

              4>创建单列索引              

create index zytest3_addr on zytest3(address(4));                 alter table zytest3 add index zytest3_addr(address(4));

          5>创建多列索引
                

create index zytest4_na on zytest4(name,address);                 alter table zytest4 add index zytest4_na(name,address);6》如何删除索引:

       如果没有别名,+索引名称
       语法:drop index 索引名 ON 表名
             drop indexid on zytest;

        如果有别名的话。直接+索引别名
        语法:drop index 索引别名 ON 表名

================触发器

1》触发器的含义与作用

            触发器(trigger)是由事件来触发某个操作,主要是由insert update delete等事件来触发某种特定的条件,满足触发器的触发条件时,数据库就会执行触     发器定义的程序语句,比如:当学生表当中增加了一个学生记录,学生的总数就必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录。
   就执行一次计算学生的总数量的操作。这可以保证每次增加学生后的记录统计一直保持最新;触发器触发的执行语句可以只有一个。也可能有多个;

         语法:
            create trigger 触发器名称  before|after 触发事件
            on 表名 for each row 执行语句
            berfore指触发事件之前执行的触发语句。
            After 表示在触发事件之后执行语句
            触发事件包括(insert update delete)等
            on表名在XXX表之上
            执行语句指的是XXSQL语句和触发事件类型要对应

          A  触发器  B存放A总记录,
          当A表删除一条数据之后—>触发器将统计的最终结果写入到B表当中,用户每次想要得到A表的结果,只需要去B表当中查询就行了。
           select count(*) from A >B表当中。

2》创建触发器

         1>创建一个表alvin
                

create table alvin(                     userid int(10),                     username varchar(20),                     old int(4),                     address varchar(30));

         2>创建一个表为trigger_time用来存放触发后条件的结果
                 

create table trigger_time(                       zhixing_time time);                  Query OK, 0 rows affected (0.15 sec)

         3>创建只有单个执行语句的触发器
                 

create trigger alvin1 before insert                       on alvin for each row                   insert into trigger_time values(now());                   Query OK, 0 rows affected (0.07 sec)

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

         举例一、
              root@zytest 10:49>delimiter &告诉MYSQL该命令段下面的内容在提示结束后再执行分析。默认是以分号(;)执行
     

 root@zytest 10:53>create trigger alvin3 after delete              ->on alvin for each row                -> begin              ->insert into trigger_time values('21:01:01');              ->insert into trigger_time values('22:01:01');               ->end                  ->&&     Query OK, 0 rows affected (0.05 sec)             root@zytest 10:54>delimiter;#结束退出,注意分号要有空格                 root@zytest 10:57>select * from alvin;                 +--------+-------------+------+----------+                 | userid | username    | old  | address  |                 +--------+-------------+------+----------+                 |    110 | zengxiaohua |   28 | tianxing |                 +--------+-------------+------+----------+                 1 row in set (0.00 sec)             root@zytest 11:07>delete from alvin where userid='110';#执行删除动作看看触发器是否成功                 Query OK, 1 row affected (0.05 sec)                 root@zytest 11:07>select * from trigger_time;#:查看触发器的执行结果                   +--------------+                   | zhixing_time |                   +--------------+                   | 19:09:41     |                   | 21:01:01     |                   | 22:01:01     |                   +--------------+                 3 rows in set (0.00 sec)

     举例二、
    alvin1表存放了学生的信息。每次增加(insert)一个学生的信息。就触发一次统计。统计结果存入aac表里面;
    首先创建一个alvin1表结构
      

create table alvin1(          user_id int(10),          username varchar(20),          old tinyint(4),          address varchar(30));      create table aac(          my_count int);

    然后开始创建一个触发器
      

delimiter&&      create trigger alvin123 before insert on      alvin1 for each row begin      declare ycount int(10);#:申明变量类型      set ycount=(select count(*) from alvin1);#:给变量赋值      insert into aac(my_count) values(ycount);#:调用变量      end&&      delimiter ;

  看看before和after的区别
    

create trigger alvin123 after insert on      zyalvin1 for each row      begin      declare ycount int(10);      set ycount=(select count(*) from zyalvin1);      insert into aac(my_count)values(ycount);      end&&    root@zytest 16:24>insert into alvin1 values('1001','zhangsan','18','China');开始测试    root@zytest 16:24>select * from aac;查看触发器统计的结果。

3》查看触发器

      1> 查看所有触发器,提前要进入某库
             #: show triggers G;

      2>在triggers表中查看触发信息
             root@zytest 11:20>use information_schema;
             root@zytest 11:19>select * from information_schema.triggers G;
           小技巧:所有触发器的信息都存在information_schema库中的triggers表里面,在使用select 查询单个触发器的时候。可以根据triggers表里面的字段名称
               Trigger_name字段进行查询。
             root@information_schema 11:24>select * from triggers where trigger_name=’alvin1’G;

  4》删除触发器

  语法:
         1>删除alvin1触发器
               

 root@(none) 12:18>use zytest;                   Database changed                 root@zytest 12:18>drop trigger alvin1;                 Query OK, 0 rows affected (0.03 sec)

 

以上就是MySQL中关于索引与触发器详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1041196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
vivo浏览器如何阻止弹窗广告 vivo浏览器强力拦截恶意弹窗设置
上一篇 2025年12月2日 04:43:49
css animate.css与keyframes结合制作动画
下一篇 2025年12月2日 04:43:52

相关推荐

  • mysql安装完如何诊断 mysql慢查询分析与优化方法

    要解决 mysql 慢查询问题,首先要开启慢查询日志,其次使用 mysqldumpslow 分析日志,再通过 explain 查看执行计划,最后根据常见优化建议改进 sql 和索引。具体步骤如下:一、修改配置文件或动态开启慢查询日志,并设置阈值和路径;二、使用 mysqldumpslow 工具分析慢…

    2026年9月22日
    100
  • 主板供电相数对CPU超频稳定性的影响:14相 vs. 20相实测

    20相供电主板在超频下表现更稳,实测显示其VRM温度更低、电压波动更小、性能输出更一致,尤其适合极限超频和高负载场景,而14相供电配合优质用料也能满足主流超频需求,普通用户无需盲目追求高相数。 主板供电相数直接影响CPU在高负载和超频状态下的电压稳定性和温度控制。很多人在选择主板时会看到“14相”或…

    2026年9月22日
    200
  • PHP如何实现视频留言评论_PHP实现视频留言评论功能

    答案:通过数据库设计、前端表单、后端处理和评论展示四步实现PHP视频留言功能。1. 创建comments表存储信息;2. 构建表单提交昵称与评论;3. 用add_comment.php接收并存入数据库;4. 在页面读取并安全输出评论,防止XSS。 要实现视频留言评论功能,PHP可以结合前端页面、数据…

    2026年9月22日
    000
  • mysql安装后怎么建表 mysql创建数据表的详细步骤

    mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤

    安装完 mysql 后,建表的关键在于先创建数据库并选择使用,然后通过 create table 语句定义表结构。1. 创建数据库:使用 create database mydatabase; 创建数据库;2. 使用数据库:通过 use mydatabase; 选择当前操作的数据库;3. 建表语法:…

    2026年9月22日 用户投稿
    200
  • 夸克浏览器电脑网页版访问入口 夸克官网主页链接地址

    夸克浏览器电脑网页版访问入口是https://www.quark.cn/,用户可直接在浏览器地址栏输入该链接访问,其界面采用极简设计并集成智能搜索、网盘服务与跨设备同步等功能。 立即进入“☞☞☞☞☞点击夸克资源网(永久免费)入口☜☜☜☜☜”; 立即进入“☞☞☞☞☞点击夸克浏览器电脑网页版访问入口☜☜…

    2026年9月22日
    500
  • mysql如何输入变量值 mysql交互式代码输入步骤详解

    mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解

    在mysql命令行中交互式输入变量值可通过预处理语句或用户自定义变量实现。1. 使用预处理语句时,先用prepare定义含占位符的sql语句,再通过set设置变量值,最后用execute执行并传参,完成后需deallocate释放资源;2. 使用用户自定义变量时,直接通过set赋值并在sql语句中引…

    2026年9月22日 用户投稿
    100
  • RAID 0阵列对NVMe SSD性能的提升与数据安全风险分析

    RAID 0通过多NVMe SSD并行提升读写性能,理论速度翻倍且显著优化高负载响应,但无冗余导致任一硬盘故障即全阵列崩溃,数据恢复极难,仅建议用于可接受高风险的临时工作或性能优先场景,并必须配合外部备份。 raid 0通过将数据条带化分布在多个存储设备上,理论上可提升读写性能。在搭配nvme ss…

    用户投稿 2026年9月22日
    200
  • SonyCatalyst如何制作高质量AI视频?专业工具剪辑AI内容的指南

    Sony Catalyst通过素材筛选、视觉修正、色彩校正、细节雕琢与音频优化,将AI生成的粗胚视频精修为具备叙事感与视觉一致性的专业作品,其强大色彩管理、稳定器与降噪工具有效解决AI视频的抖动、噪点、色彩偏差等问题,并支持高分辨率素材处理与跨平台输出,实现AI内容与传统剪辑流程的高效融合。 ☞☞☞…

    2026年9月22日
    000
  • 如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    Dask在处理超大规模数据集时的独特优势在于其Python原生的分布式计算能力,能无缝扩展Pandas和NumPy的工作流,突破单机内存限制,实现高效的数据预处理与模型训练。它通过惰性计算、分块处理和内存溢写机制,支持TB级数据的并行操作,相比Spark提供了更贴近Python数据科学生态的API和…

    2026年9月22日 用户投稿
    100
  • mysql安装完成如何卸载 mysql完全删除数据库的方法

    mysql安装完成如何卸载 mysql完全删除数据库的方法mysql安装完成如何卸载 mysql完全删除数据库的方法mysql安装完成如何卸载 mysql完全删除数据库的方法mysql安装完成如何卸载 mysql完全删除数据库的方法

    彻底卸载mysql需多步骤操作一、停止并卸载服务:windows执行net stop mysql和mysqld –remove,linux用systemctl stop mysql并卸载软件包二、手动删除数据和配置文件:包括数据目录/var/lib/mysql、配置文件/etc/mysq…

    2026年9月22日 用户投稿
    100
  • 如何设置Linux用户磁盘配额 xfs_quota配置完整流程

    如何设置Linux用户磁盘配额 xfs_quota配置完整流程如何设置Linux用户磁盘配额 xfs_quota配置完整流程如何设置Linux用户磁盘配额 xfs_quota配置完整流程如何设置Linux用户磁盘配额 xfs_quota配置完整流程

    linux用户磁盘配额是通过xfs_quota工具配置,以限制用户或组的磁盘空间和文件数量。1. 确认文件系统为xfs并安装xfsprogs;2. 修改/etc/fstab启用usrquota和grpquota后重新挂载;3. 使用xfs_quota初始化数据库;4. 用limit命令设置用户或组的…

    2026年9月22日 用户投稿
    000
  • 家庭NAS搭建:硬件选型与RAID模式对传输速度的影响

    家庭NAS搭建需综合考虑CPU、内存、硬盘接口、网络和RAID模式。CPU至少四核,内存8GB起,推荐N5105/N100或AMD嵌入式处理器;千兆网口成瓶颈,应升级至2.5G/10G;SATA III限制SSD性能,建议支持NVMe主板。RAID 0提升速度但无冗余,RAID 1保障安全但写速低,…

    2026年9月22日
    100
  • 如何扫描Linux本地网络 nmap基础扫描技巧

    如何扫描Linux本地网络 nmap基础扫描技巧如何扫描Linux本地网络 nmap基础扫描技巧如何扫描Linux本地网络 nmap基础扫描技巧如何扫描Linux本地网络 nmap基础扫描技巧

    快速扫描整个子网可使用 sudo nmap -sn 192.168.1.0/24,用于发现活跃主机;若防火墙屏蔽icmp请求,可加 -pe 参数提高准确性。2. 扫描单台设备开放端口用 sudo nmap 192.168.1.100,默认扫描1000个常见端口,或加 -p- 扫描全部端口,并可用 -…

    2026年9月22日 用户投稿
    100
  • 如何在mysql中监控用户操作日志

    MySQL默认不记录用户操作日志,但可通过启用通用查询日志记录所有SQL操作,或使用二进制日志追踪数据变更,也可部署审计插件实现细粒度监控,结合独立账号管理和日志轮转策略提升安全性与可追溯性。 MySQL 本身不默认记录用户的所有操作日志,但可以通过启用特定的日志功能来实现对用户行为的监控。以下是几…

    2026年9月22日
    100
  • 爱应用pc版官网访问地址 爱应用pc版平台官方链接直达首页

    爱应用PC版官网访问地址是http://www.xapcn.com/,该软件为WP7/WP8手机提供资源管理、软件游戏免费安装等服务。 爱应用pc版官网访问地址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来爱应用pc版平台官方链接直达首页,感兴趣的网友一起随小编来瞧瞧吧! http://…

    2026年9月22日
    100
  • 宇宙级编辑器VSCode你真的会用吗?这些隐藏功能让效率翻倍​​

    VSCode的真正潜力在于深度使用命令面板、多光标编辑、用户代码片段、集成终端与任务、自定义快捷键及扩展生态,通过主动探索设置、状态栏功能、官方文档与社区资源,结合个性化主题与高效扩展,将其从基础编辑器升级为高度定制化、自动化、无缝集成的专属开发利器,显著提升编码效率与体验。 你可能以为自己会用VS…

    2026年9月22日
    000
  • mysql安装完如何连接 mysql安装后的客户端使用教程

    mysql安装完如何连接 mysql安装后的客户端使用教程mysql安装完如何连接 mysql安装后的客户端使用教程mysql安装完如何连接 mysql安装后的客户端使用教程mysql安装完如何连接 mysql安装后的客户端使用教程

    连接mysql的方法包括命令行连接本地数据库、配置远程访问权限、使用图形化工具及排查连接问题。1. 使用命令行输入mysql -u root -p并输入密码登录,若未设密码可省略-p;2. 创建远程用户并授权:create user ‘newuser’@’%&#8…

    2026年9月22日 用户投稿
    300
  • Qoder上线提示词增强功能 将开发者从“提示词”的负担中解放出来

    在 agentic coding 的新时代,一个关键挑战日益凸显:要得到卓越的答案,你必须先提出卓越的问题。 对开发者而言,这意味着需要投入大量时间去精心设计给ai的“提示词”。一句笼统的指令,比如“帮我写个函数”,往往只能换来一段简陋甚至存在安全隐患的代码;而一条清晰、结构完整、细节丰富的提示,则…

    2026年9月22日
    000
  • 如何用RunwayML导出AI生成的图片?高效保存图像的实用教程

    导出RunwayML生成的图片需先完成生成任务并进入详情视图,点击“下载”选择PNG或JPG等格式,推荐PNG以保留高质量细节;批量导出时使用多选功能统一设置分辨率和格式,提升效率;建议采用项目化文件夹结构与规范化命名规则管理海量图片,并利用标签、云同步辅助整理;后续应用中可结合Photoshop、…

    2026年9月22日
    100
  • mysql如何输入多行语句 mysql命令行写sql代码技巧

    mysql如何输入多行语句 mysql命令行写sql代码技巧mysql如何输入多行语句 mysql命令行写sql代码技巧mysql如何输入多行语句 mysql命令行写sql代码技巧mysql如何输入多行语句 mysql命令行写sql代码技巧

    在mysql命令行中输入多行语句时,需注意以下要点:1. 多行语句不应在中间行使用分号结束,只有在最后一行加上分号后,mysql才会执行整个语句;2. 若输入过程中未完成语句,mysql会显示 -> 提示符,此时可继续输入;3. 可使用 c 命令取消当前语句的输入;4. 为提高可读性,建议使用…

    2026年9月22日 用户投稿
    000

发表回复

登录后才能评论
关注微信