mysql 高并发写入锁表_使用mysql中的锁解决高并发问题

本文探讨了在多线程和网络编程中为何需要加锁以解决并发问题,特别是MySQL中的锁在处理高并发写入时的作用。介绍了MySQL的存储引擎InnoDB,强调其事务支持和四种锁的问题,如丢失更新、脏读、不可重复读和幻读。讨论了乐观锁和悲观锁的概念,并详细阐述了InnoDB中的共享锁和排他锁,以及如何使用它们。此外,还提到了行级锁是基于索引实现的,无索引时会升级为表级锁,最后总结了InnoDB锁与事务的配合使用。
摘要由CSDN通过智能技术生成

阿里云产品通用代金券,最高可领1888分享一波阿里云红包. 阿里云的购买入口

为什么要加锁

多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务。在多线程编程中,因为线程执行顺序不可控导致的数据错误。比如,多线程的理想状态是这样的

fe708aad6113?tdsourcetag=s_pcqq_aiomsg

多线程理想.jpg

但是实际情况是这样的:

fe708aad6113?tdsourcetag=s_pcqq_aiomsg

多线程实际.jpg

在网络编程中,在同一时刻,多个客户端同时请求同一个资源,如果不做控制,也会带来数据错误。比如在同一时间有10000人去抢10张火车票,10张火车票有可能会买给100个人,这显然是不符合要求的。

在多线程编程中,为了解决线程执行不可控带来的问题,通常情况下都是通过加锁来实现数据同步的。在网络编程中,也可以通过加锁机制来控制。

在网络编程中,可以通过给数据库加锁,达到控制并发的目的。在php开发时,基本都是使用mysql作为数据库。所以,就会给mysql加锁控制网络并发引起数据错误问题。

MySQL的存储引擎

不是要说MySQL的锁吗,怎么说上存储引擎了?因为MySQL存储引擎不同,锁也会不同。MySQL有MyISAM 和InnoDB两种存储引擎,现在主要使用InnoDB,所以主要介绍InnoDB下锁的使用。

InnoDB引擎支持事务操作,使用事务可以保证多条sql语句执行的完整性(要不都成功,要不都失败)

事务是由一组SQL语句组成的逻辑处理单元,事务具有4属性

原子性(Actomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。

一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以操持完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。

隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值