• 索引,事务,存储过程,范式


    索引整合

    事务整合

    存储过程整合

    数据库范式

    1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。

    2.事务的语句
    开始事物:BEGIN TRANSACTION
    提交事物:COMMIT TRANSACTION
    回滚事务:ROLLBACK TRANSACTION

    3.事务的4个特性
      ①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,是不可折分的,事务是一个完整的操作。
      ②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。
      ③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式来影响其他事务。
      ④持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库

    4.事务的分类.
    按事务的启动与执行方式,可以将事务分为3类:
      ①显示事务 :也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务
      ②自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。
      ③隐性事务:当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链

    5.实例
    BEGIN TRANSACTION--开始事务

    DECLARE @errorSun INT --定义错误计数器
    SET @errorSun=0 --没错为0

    UPDATE a SET id=232 WHERE a=1 --事务操作SQL语句
    SET @errorSun=@errorSun+@@ERROR --累计是否有错

    UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句
    SET @errorSun=@errorSun+@@ERROR --累计是否有错

    IF @errorSun<>0
    BEGIN
    PRINT '有错误,回滚'
    ROLLBACK TRANSACTION--事务回滚语句
    END
    ELSE
    BEGIN
    PRINT '成功,提交'
    COMMIT TRANSACTION--事务提交语句
    END


    6、不能用于事务的操作
    创建数据库 create database
    修改数据库 alter database
    删除数据库 drop database
    恢复数据库 restore database
    加载数据库 load database
    备份日志文件 backup log
    恢复日志文件 restore log
    更新统计数据 update statitics
    授权操作              grant
    复制事务日志 dump tran
    磁盘初始化           disk init
    更新使用sp_configure后的系统配置           reconfigure

    存储过程整合

    1.什么是存储过程:存储过程是一组为了完成特定功能的sql语句集,经编译后存储在数据库中,存储过程可包含程序流、逻辑以及对数据库的查询。他们可以接受参数、输出参数、返回单个或多个结果集以及返回值

    2.存储过程的优势
    (1) 能实现模块化程序设计
    (2) 使用存储过程可以提高执行效率。当客户程序需要访问服务器上的数据时,一般要经过5个步骤:
     ● 查询语句被发送到服务器;
     ● 服务器编译T-SQL语句;
     ● 优化产生查询执行计划;
     ● 数据库引擎执行查询;
     ● 执行结果发回客户程序。
    如果执行存储在客户端本地的T-SQL程序,那么每次执行该程序时,对于程序中的每一条语句都要经过以上5个步骤。而存储过程在创建时就被编译和优化,当存储过程第一次被执行时,SQL Server为其产生查询计划并将其保存在内存中,这样以后在调用该存储过程时就不必再进行编译,即以上5个步骤中的第2步和第3步就被省略了,这能大大改善系统的性能。 
    (3) 减少网络流量。一个需要数百行T-SQL代码的操作,如果将其创建成存储过程,那么使用一条调用存储过程的语句就可完成该操作。这样就可避免在网络上发送数百行代码,从而减少了网络负荷。
    (4) 可作为安全机制使用。管理员可以不授予用户访问存储过程中涉及的表的权限,而只授予执行存储过程的权限。用户通过存储过程来访问表,所能进行的操作是有限制的,从而保证了表中数据的安全性。

    3.存储过程的类型
    (1) 系统存储过程: 在SQL Server中的许多管理工作是通过执行系统存储过程来完成的。

    (2) 扩展存储过程: 扩展存储过程是以动态链接库(dll)形式存在的外部程序。

    (3) 用户存储过程: 用户存储过程是由用户根据实际问题的需要所创建的存储过程。

    4.创建有参数的存储过程:

    use pubs
    go
    create procedure MyPRO
    @id varchar(11),
    @contract bit,
    @phone char(12) output
    as
    select @phone=phone from authors where au_id=@id and [contract]=@contract

    --调用存储过程
    decla @phone char(12)
    exec mypro '267-41-2394',true,@phone output
    print @phone

    数据库范式

    1.第一范式(确保每列保持原子性)  范式不可拆分

    第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

    2.第二范式(确保表中的每列都和主键相关) 完全依赖

    第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

    3.第三范式(确保每列都和主键列直接相关,而不是间接相关) 消除传递依赖

    第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。表中不包含已在其它表中已包含的非主关键字信息

  • 相关阅读:
    高德全链路压测平台TestPG的架构与实践
    性能测试之稳定性测试(可靠性测试)
    服务端高并发分布式架构演进之路
    高性能高并发系统的稳定性保障
    聊聊服务稳定性保障这些事
    qt 待研究
    k73 uboot 和emmc启动移植
    Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
    C++ Lambda 编译器实现原理
    qt 网络编程参考资料
  • 原文地址:https://www.cnblogs.com/kxdblog/p/4325455.html
Copyright © 2020-2023  润新知