博客
关于我
15.sql server数据库事务和数据库锁、触发器、游标、视图、自定义函数、字段(by-朝夕)
阅读量:536 次
发布时间:2019-03-08

本文共 1352 字,大约阅读时间需要 4 分钟。

数据库事务与锁

1. 数据库事务

数据库事务是一组访问和操作数据库数据的数据库操作序列,所有操作要么全部成功,要么全部失败,属于一个不可分割的工作单位。事务的核心特性是保证数据的完整性。

  • 事务的特性(ACID)
    • 原子性 (Atomicity):要么全部成功,要么全部失败。
    • 一致性 (Consistency):事务执行后,数据处于正确的状态。
    • 隔离性 (Isolation):避免数据冗余,确保不同事务间的数据操作隔离。
    • 持久性 (Durability):提交事务后,修改的数据不会丢失。

2. 锁

锁是确保多线程环境下数据库数据操作的正确性的机制。选择合适的锁类型和粒度可以有效避免并发问题。

#####乐观锁基于程序设计,不依赖数据库锁机制。通过版本号和时间戳判断数据是否被修改:

  • 使用版本号(如 TimestampVersion)标识记录。
  • 查询数据后,检查版本号是否一致。
  • 若一致,更新并保留新的版本号;否则,日志异常并滚回。
  • #####悲观锁依赖数据库锁机制,确保并发操作的安全性:

    • 共享锁 (S锁):读锁,允许其他事务读取但不允许修改。
    • 排他的锁 (X锁):写锁,不允许其他事务读或写。
    • 更新锁 (U锁):先读后写,允许事务在读取阶段不阻塞其他事务。
    • 表锁 (Table Lock):锁定整个表。
    • 行锁 (Row Lock):锁定特定行。

    3. 锁的使用

    锁可以通过以下方式指定:

    • NOLOCK:不可重复读,可能读取未提交数据。
    • ROWLOCK:默认锁定行级。
    • 页锁 (PAGLOCK):锁定数据页。
    • 表锁 (TABLOCK):锁定整个表。
    • ``HOLDLOCK**或**SERIALIZABLE`:保持锁直到事务完成,确保高一致性。

    4. 避免死锁

    死锁难以完全避免,但可以通过以下方式降低概率:

    • 使用乐观锁:减少锁争夺,提升性能。
    • 统一操作顺序:指定操作依次执行,减少死锁风险。
    • 锁定最小单位:细化锁定粒度,减少冲突。
    • 减少并发度:采用微服务架构或分区处理。
    • 设置锁超时:防止长时间等待导致死锁。

    5. 示例测试

    使用 TABLOCKX 锁在两个窗口中操作:

  • 第一个窗口:
  • BEGIN TRAN SELECT * FROM [User] WITH (TABLOCKX) WAITFOR Delay '00:00:10.01' ROLLBACK TRAN
    1. 第二个窗口:
    2. BEGIN TRAN SELECT * FROM [User] WITH (TABLOCKX) ROLLBACK TRAN

      锁存在导致第二个窗口无法执行,需要 designers 处理。

      6. 存储过程

      存储过程是数据库中的可执行程序,用于封装和管理数据库操作。

      存储过程的优势
      • 模块化:业务逻辑可分解为多个存储过程。
      • 性能提升:预编译存储过程加快执行速度。
      • 减少网络流量:减少数据传输量。
      • 内部安全机制:隔离执行权限。
      常用语句
      exec sp_databases; --查看数据库exec sp_tables; --查看表exec sp_columns student; --查看列

      7. 备注

      数据库事务和锁是系统设计的核心,需根据具体需求选择合适的策略。优化数据库性能和可靠性需要综合考虑并发控制和锁机制。

    转载地址:http://uetiz.baihongyu.com/

    你可能感兴趣的文章
    nginx + etcd 动态负载均衡实践(一)—— 组件介绍
    查看>>
    nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
    查看>>
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + Tomcat + SpringBoot 部署项目
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    nginx - thinkphp 如何实现url的rewrite
    查看>>
    Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
    查看>>
    Nginx - 反向代理与负载均衡
    查看>>
    nginx 1.24.0 安装nginx最新稳定版
    查看>>
    nginx 301 永久重定向
    查看>>
    nginx 301跳转
    查看>>
    nginx 403 forbidden
    查看>>
    nginx connect 模块安装以及配置
    查看>>
    nginx css,js合并插件,淘宝nginx合并js,css插件
    查看>>
    Nginx gateway集群和动态网关
    查看>>
    nginx http配置说明,逐渐完善。
    查看>>
    Nginx keepalived一主一从高可用,手把手带你一步一步配置!
    查看>>