【无标题】

一、触发器、游标与视图

1、触发器
MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这
些事件包括INSERT、UPDATAE和 DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就
会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激
活该对象。
触发器(trigger)是一个特殊的存储过程,不同的是,执行存储过程要 使用CALL语句来调用,而触发
器的执行不需要使用CALL语句来调用,也 不需要手工启动,只要当一个预定义的事件发生的时候,就会
被MySQL自
动调用。比如当对fruits表进行操作(INSERT、DELETE或UPDATE)时就会激活它执行。
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于满足复杂的业务规则或要求。例
如,可以根据客户当前的账户状态控制是否允许插入新订单
触发器:在哪个表触发
行级触发器:影响几条记录就会触发几次
语句级触发器:一条sql语句执行了,就会触发一次
before after
新值:新添加的值教新值
旧值:
update grade set gradename=‘新班级’ where gradeid=1;此时“新班级”为新值,数据库中原有
的值为旧值。
2、流程语句
1> IF语句
2> 循环结构
3、游标
游标是处理多行数据的,游标需要开启,抓取,关闭的

4、视图
数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列
数据来自由定义视图查询所引用的表,并且在引用视图时动态生成。视图是从一个或者多个表中导出
的,视图的行为与表非常相似,但视图是一个虚拟表。在视图中用户可以使用SELECT语句查询数据。
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基
础上定义。
视图特点:
1>简单化:看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化它们的
操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件
2>安全性:通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既
看不见也取不到。
3>逻辑数据独立性:视图可帮助用户屏蔽真实表结构变化带来的影响。
视图主要做查看,不做insert,update,delete。虽然单表创建的视图,可以执行,但不推荐。多表创
建视图无法执行以上操作。

**

二、索引

**
索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL 必须从第1条记录开始读完整个
表,直到找出相关的行。表越大,查询数据 所花费的时间越多。如果表中查询的列有一个索引,MySQL
能快速到达某 个位置去搜寻数据文件,而不必查看所有数据。索引是对数据库表中一列或多列的值进行
排序的一种结构,使用索引可 提高数据库中特定数据的查询速度
索引的含义和特点:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可 提高数据库
中特定数据的查询速度。使用索引可以快速找出在某个或多个列中有一特定值的 行,所有MySQL列类型
都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。
索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全 相同,并且每种存储引擎也不一
定支持所有索引类型。
MySQL中 索引的存储类型有两种,即BTREE和HASH,具体和表的存储引擎相关; MyISAM和InnoDB
存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎 可以支持HASH和BTREE索引
索引的优点:(1)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。 ( 2)可以大大加
快数据的查询速度,这也是创建索引的主要原因。 ( 3)在实现数据的参考完整性方面,可以加速表和
表之间的连接。 ( 4)在使用分组和排序子句进行数据查询时,也可以显著减少查询中 分组和排序的时
间。
索引的缺点:(1)创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费 的时间也会增加。
( 2)索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引 还要占一定的物理空间,如果有
大量的索引,索引文件可能比数据文件更快 达到最大文件尺寸。 ( 3)当对表中的数据进行增加、删除
和修改的时候,索引也要动态地 维护,这样就降低了数据的维护速度。
索引的设计原则:索引设计不合理或者缺少索引都会对数据库和应用程序的性能造成障 碍。高效的索引
对于获得良好的性能非常重要。设计索引时,应该考虑以下 准则:(1)索引并非越多越好,一个表中
如有大量的索引,不仅占用磁盘空 间,还会影响INSERT、DELETE、UPDATE等语句的性能,因为在表
中的 数据更改时,索引也会进行调整和更新。 ( 2)避免对经常更新的表进行过多的索引,并且索引中
的列要尽可能 少。应该经常用于查询的字段创建索引,但要避免添加不必要的字段。 ( 3)数据量小的
表最好不要使用索引,由于数据较少,查询花费的时 间可能比遍历索引的时间还要短,索引可能不会产
生优化效果。 ( 4)在条件表达式中经常用到的不同值较多的列上建立索引,在不同 值很少的列上不要
建立索引。比如在学生表的“性别”字段上只 有“男”与“女”两个不同值,因此就无须建立索引,如果建立索
引不但不会提 高查询效率,反而会严重降低数据更新速度。 ( 5)当唯一性是某种数据本身的特征时,
指定唯一索引。使用唯一索 引需能确保定义的列的数据完整性,以提高查询速度。 ( 6)在频繁进行排
序或分组(即进行group by或order by操作)的列上 建立索引,如果待排序的列有多个,可以在这些列
上建立组合索引。
索引分类:1.普通索引和唯一索引 普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入
重 复值和空值。 唯一索引要求索引列的值必须唯一,但允许有空值。如果是组合索引, 则列值的组合
必须唯一。主键索引是一种特殊的唯一索引,不允许有空值。
CREATE VIEW viewname AS SELECT … 1
2.单列索引和组合索引 单列索引即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使 用了这些字段的左边字段时,索
引才会被使用。使用组合索引时遵循最左前 缀集合。
3.全文索引 全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找, 允许在这些
索引列中插入重复值和空值。全文索引可以在CHAR、 VARCHAR或者TEXT类型的列上创建。MySQL中
只有MyISAM存储引擎支 持全文索引。
4.空间索引 空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据 类型有4
种,分别是GEOMETRY、POINT、LINESTRING和POLYGON。 MySQL使用SPATIAL关键字进行扩展,
使得能够用创建正规索引类似的语 法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,
空间索 引只能在存储引擎为MyISAM的表中创建。
索引创建:1.创建普通索引,最基本的索引类型,没有唯一性之类的限制,其作用只是加快对数据的访
问速度。

三、事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,
要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作
组成
事务是由一组SQL语句 组成的逻辑处理单元,它的ACID特性如下:
(1)原子性(Atomicity):事务具有原子不可分割的特性,要么一起执行,要么都不执行。
(2)一致性(Consistency):在事务开始和事务结束时,数据都保持一致状态。
(3)隔离性(Isolation):在事务开始和结束过程中,事务保持着一定的隔离特性,保证事务不受外部
并发数据操作的影响。
(4)持久性(Durability):事务完成后,数据将会被持久化到数据库中。

事务隔离级别:一个事务对数据库修改与并行的另一个事务的隔离程度。
两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:
1、幻想读,2、不可重复读取 ,3、脏读
在这里插入图片描述

四、数据库三范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规
则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足
一定的范式。
在实际开发中最为常见的设计范式有三个:
1.第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满
足了第一范式。
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,
本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”
部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对
地址中某一部分操作的时候将非常方便。
2. 第二范式(确保表中的每列都和主键相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不
能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保
存一种数据,不可以把多种数据保存在同一张数据库表中。

3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值