数据库索引-触发器-存储过程-视图

一,数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中的数据。

 

1,事务的保障:ACID。

    ACID一言以蔽之就是原子性、一致性、隔离性、持久性事务,它是四个单词的缩写:

¥Atomicity,原子性,事务中的操作要么全部完成,要么全失败。

¥Consistency,一致性, 在事务开始时或者结束时,数据库应该处于同一状态。

¥Isolation,隔离性,事务将假定只有它自己在操作数据库,彼此不知晓。

¥Durablity,一旦事务完成,就不能返回。

2,丰富的数据类型和SQL的操作方式。

    1),数字:整数和小数。整数可以分为32位,64位。

    2),字符串类型:字符串分为固定长度和可变长度。

    3),时间,  时间和日期

    4),二进制流。

 

3,SQL语句的结构主要分为以下几大部分:

    1),操作,select, insert, update, delete

    2),表对象。

    3),字段范围

    4),where

    5),order排序

    6),查询范围限制。

 

4,对数据高并发读写的要求。

    数据库读写压力大,    硬盘IO无法承受。一般处理方法是主从架构、读写分离、分库、分表,缓解写压力,增强读库的可扩展性。

 

5,对海量数据的存储和访问

存储记录数量有限,SQL查询效率极低的情况下。通过分库、分表,缓解数据增长压力。

6,伸缩性、可用性、可靠性方面的需求。

    横向扩展艰难,无法通过快速增加服务器节点实现,系统升级和维护造成服务不可用。通过主从架构,增强读库的扩展性,利用MMM架构处理写的瓶颈。

7,分库分表的缺点:

    1),受业务规则影响,需求变动导致分库分表的维护复杂。

    2),系统数据访问层代码需要修改。

 

8,主从架构缺点:

    1),Slave实时性保障。对于实时性很高的场合可能需要做一些处理( 在第一个购买增值服务的例子中,添加扣费记录之后,在读写分离的场景下,立马去从库查询扣费记录不一定能查到 )。

    2),高可用性问题,Master就是那个致命点,容易产生单点故障。

MMM缺点:本身扩展性差,一次只能一个Master可以写入,只能解决有限数据量下的可用性。

 

 

mysql索引概念:

假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的。

Mysql索引主要有两种结构:B+Tree索引和Hash索引。

Hash索引

MySQL中,只有Memory存储引擎显示支持Hash索引,是Memory表的默认索引类型。

因为是hash结构,每个键只对应一个值,而且是散列的方式分布。所以并不支持范围查找和排序功能。

 

B+数索引

二,触发器。

1,触发器的“自动性”。(修改一张表,其他几个或者多个表中的冗余字段会更改。)

2,触发器的数据完整性。(回滚性,要不都更改,要不都不更改。)

例子:

【mysql> drop trigger if exists deletecomment ||
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create trigger deletecomment before delete on user for each row
    -> begin
    -> delete from comment where comment.u_id=old.id;
    -> end ||
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter;

删除user表中的数据,之后会删除comment表中一条对应user表的数据。

 

三,存储过程。

1、使用了存过程,很多相似性的删除,更新,新增等操作就变得轻松了,并且以后也便于管理!
2、存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。   
3、存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。     
4、存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。     
5、存储过程主要是在服务器上运行,减少对客户机的压力。   
6、存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。   
7、存储过程可以在单个存储过程中执行一系列SQL语句。   
8、存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

例子:

-- 显示数据库中所有的存储

show PROCEDURE status;

-- 查看某个存储过程

show create procedure sp1

--删除存储过程

drop PROCEDURE sp1

-- 创建存储过程

create PROCEDURE sp1() select * from h_hub_status
 

-- 执行存储过程

CALL sp1()

 

四,视图。

1,简单:使用视图的用户不需要关系视图中数据怎么查询得到的,视图中的数据对用户来说已经是过滤好的符合条件的结果集;

2,安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个列或某个行,但是通过视图可以简单实现;

3,数据独立;一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,原表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

视图操作

视图的操作包括创建视图、查看视图、删除视图和修改视图。

例子:

create view view_test as select * from tn_admin    //创建视图

create or replace view view_test as select * from tn_lock    //修改视图

desc view_test /show fields from view_test   //查看视图结构

 

转载于:https://my.oschina.net/u/3290532/blog/858753