存储过程和函数的区别?什么是视图、索引、触发器?视图的作用?索引的种类有哪些?

存储过程和函数的区别

存储过程的限制相对较少,函数限制比较多【不能用临时表,只能用表变量】
存储过程实现的功能比较复杂,函数实现的功能针对性更强
存储过程一般作为独立的部分来执行,函数可以作为查询语句的一部分来调用【可位于 select 中 from 关键字后面】
存储过程可返回参数或结果集【可返回多个】,函数只能返回值或表对象【只能返回一个变量】
存储过程的参数可以有in,out,inout三种类型,函数只能有in类
存储过程声明时不需要返回类型,函数声明时需要描述返回类型,且函数体中必须包含一个有效的return语句
函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行
存储过程处理比较复杂的业务时比较实用
使用了存储过程的系统更加稳定
存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译
存储过程声明时不需要返回类型
存储过程通过call语句调用 call 存储过程名

什么是视图?

视图(view)也被称作虚表,即虚拟的表,也就是说该表里面没有数据,他的数据是从别的基础表中获取的,是一组数据的逻辑表示;视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化;视图也是一张表,对于基础表的所有基础操作(增删改查),视图也适用。

视图的作用?

① 可以定制用户数据,聚焦特定的数据
② 可以合并分离的数据,创建分区视图
③ 能够简化用户的操作
④ 能使用户以多钟角度看待同一数据
⑤ 能对重构数据库提供一定程度的逻辑独立性【重构数据库指数据库长时间运行后,物理结构、逻辑结构等发生变化,导致性能低下】
⑥ 视图能够对机密数据提供安全保护

什么是索引?

索引类似于一本书的目录,可以提高数据检索的效率,降低数据库的IO成本,索引的目的是为了更快速找到数据。
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。

索引的种类有哪些?

普通索引:仅加速查询
唯一索引:加速查询 + 列值唯一(可以有null)
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
全文索引:对文本的内容进行分词,进行搜索

Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE

1. FULLTEXT索引:即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。

2. HASH索引:可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效,对于范围查询、排序及组合索引仍然效率不高。

3. BTREE索引:是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。

4. RTREE索引:在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。相对于BTREE,RTREE的优势在于范围查找。

什么是触发器?

触发器是一种特殊类型的存储过程,当在指定表中对数据进行 update、insert 或 delete 数据修改操作时,触发器会生效。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。
简单的说,就是当一张表发生数据修改操作(插入、删除、更新)时,会自动触发执行预先编写好的若干条 SQL 语句
特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部执行,要么都不执行
作用:保证数据的完整性,起到约束的作用

触发器与存储过程的唯一区别是触发器不能执行 execute 语句调用,而是在用户执行 Transact-SQL 语句时自动触发执行

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值