mysql 行锁定需知:
1、表的存储引擎需为InnoDB
2、为查询的条件创建索引
3、for update 关键字
4、行锁定查询需要放置在事物中
例:
Begin;
select `id_sale` from `red_sale` where `id_sale` = 1 for update;
commit;
或者:
set autocommit=0; select `id_sale` from `red_sale` where `id_sale` = 1 for update;
释放 set autocommit=1;
存储过程:
例子:
/****创建存储过程***/
DELIMITER $$ /***将DELIMITER 暂转换成$$,以便数据库将存储过程编译完成后,再执行***/
DROP PROCEDURE IF EXISTS `wbs`.`p_grad_red`$$ /***如果存在则删除这个存储过程***/
CREATE DEFINER = 'root'@'localhost' PROCEDURE `wbs`.`p_grad_red`(in saleId int, in gradId int, in repeatGrad int, out detailId int)
BEGIN
DECLARE num INT; /***定义变量****/
START TRANSACTION; /**事物开启***/
select id_sale from red_sale where id_sale=saleId for update;
/***判断是否允许同个红包活动内,同一个人重复抢**/
IF repeatGrad THEN
SET num=0;
ELSE
select count(1) into num from red_detail where id_sale=saleId and id_grad=gradId;
END IF;
/****判断这个人是否已抢过红包***/
IF num > 0 THEN
SET detailId=-1;
ELSE
SET detailId=(select id_detail from red_detail where id_sale=saleId and id_grad=0 order by id_detail asc LIMIT 0,1);
IF detailId > 0 THEN
update red_detail set id_grad = gradId , grad_time=now() where id_detail=detailId;
ELSE
SET detailId=0;
END IF;
END IF;
select detailId;
COMMIT;
END$$
DELIMITER ;
/*** 回调存储过程 param1:红包ID, param2:抢红包用户ID, param3:是否允许在一个红包活动中同一个账号抢多次(1:允许,0:不允许), param4: 返回结果 return{0:该红包已被抢空, -1:该用户已抢过一次不可重复抢} ***/ call p_grad_red(1,2,1,@resultId);
select @resultId;
//mysql 表锁定与解除锁
查看当前被锁的表
show OPEN TABLES where In_use > 0;
// 查看数据库中表的状态,是否被锁;
SHOW PROCESSLIST;
//杀掉被锁的表
kill 2726;
相关推荐
### MySQL 数据库锁定机制 #### 一、概览 MySQL 数据库锁定机制是数据库系统中一项重要的技术,用于处理多用户并发访问同一份数据时可能产生的冲突问题。MySQL 支持多种类型的锁定机制,包括行级锁定、表级锁定...
1. **InnoDB存储引擎**:MySQL 5.7默认的存储引擎是InnoDB,它支持事务处理、行级锁定以及外键约束,这使得InnoDB成为处理并发操作和确保数据完整性的理想选择。5.7版本中,InnoDB在性能方面有所提升,例如更快的...
总结来说,MySQL中的索引、触发器、事务和存储过程都是非常重要的数据库特性。正确地使用这些特性可以帮助优化数据库性能、维护数据完整性和提高应用程序的整体可靠性。在实际开发中,根据具体需求选择合适的存储...
在MySQL中,`UPDATE`语句的锁定范围与数据库的隔离级别、存储引擎以及所使用的索引类型等因素密切相关。以下将详细阐述这些知识点。 1、**背景** 在数据库操作中,`UPDATE`语句用于修改已存在的数据。了解它会锁定...
《MySQL内核:InnoDB存储引擎 卷1》是一本深度探讨MySQL数据库系统核心部分——InnoDB存储引擎的专业书籍。这本书以超高清的PDF格式呈现,包含详细的书签,便于读者快速定位和查阅相关内容。InnoDB作为MySQL中最常用...
MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其性能很大程度上取决于存储引擎和索引的选取与使用。本文将深入探讨 MySQL 中的存储引擎和索引技术,帮助优化数据库性能。 首先,MySQL 提供了多种存储...
MySQL存储引擎是数据库管理系统中负责数据存储和索引管理的核心组件,它允许MySQL数据库系统在不同的存储需求下灵活选择最优的存储方案。在众多数据库系统中,MySQL独树一帜,提供了多种存储引擎供用户选择,使得...
本笔记将深入探讨MySQL的几个关键高级主题,包括索引、存储过程、查询缓存、并发参数调整、MyISAM表锁以及系统性能优化策略。 首先,我们来讨论**MySQL索引**。索引是提高查询速度的关键,它在数据库中的作用类似于...
MySQL的InnoDB存储引擎支持四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。其中,可重复读是MySQL的默认隔离级别。 接下来...
浅析MYSQL中的并发操作与锁定 MYSQL中的并发操作和锁定是数据库管理系统中非常重要的概念。并发操作是指多个线程或用户同时访问和操作同一个数据库表的能力,而锁定则是为了避免数据不一致和数据丢失所采取的一种...
在配置InnoDB存储引擎时,InnoDB是MySQL中用于处理事务处理和行级锁定的存储引擎。在MySQL5.5中,InnoDB被默认启用并作为主要的存储引擎。你需要为InnoDB表空间设置一个目录,这通常是数据目录下的ibdata1文件。此外...
在MySQL数据库中,InnoDB存储引擎扮演着至关重要的角色,它是支持事务处理、行级锁定以及外键约束的主要引擎。InnoDB的引入使得MySQL能够满足企业级应用的需求,提供了高度的数据一致性与可靠性。 首先,InnoDB的...
InnoDB是事务型数据库的首选引擎,为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎,其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。 ;2.MyISAM
其中,InnoDB作为MySQL中最常用的存储引擎之一,提供了众多高级特性,如事务支持、行级锁定以及外键约束等。本文将详细介绍如何在MySQL中启用InnoDB存储引擎,并对比分析InnoDB与其他存储引擎(如MyISAM)之间的主要...
5.4.4 存储过程和触发器 5.4.5 外键(Foreign Keys) 5.4.5.1 不使用外键的理由 5.4.6 视图(Views) 5.4.7 '--'作为一个 注解的开始 5.5 MySQL 遵循什么标准? 5.6 怎样处理没有提交/回卷...
- InnoDB是MySQL的默认存储引擎,它支持事务处理和行级锁定,这使得InnoDB在并发环境下表现出色,适用于需要高数据一致性和事务安全性的应用。 - InnoDB使用聚集索引,主键值被存储在每个数据行中,如果没有指定...
9. **存储过程与触发器**:MySQL支持创建存储过程和触发器,这些是数据库级别的程序逻辑。源码中可以看到它们的处理流程。 10. **并行查询**:MySQL 8.x版本引入了并行查询优化,尤其是在InnoDB存储引擎中,这提升...
- **InnoDB引擎优化**:InnoDB是MySQL中最常用的事务处理引擎,5.1版中对InnoDB进行了大量优化,包括更有效的行锁定,提高了并发性能。 2. **存储引擎**: - **InnoDB存储引擎**:支持事务处理,ACID(原子性、...
根据提供的文件信息,本文将详细解析如何在MySQL中利用存储过程实现循环添加数据,并通过具体的示例代码来演示这一过程。此外,还将对比分析不同存储引擎(MyISAM与InnoDB)在执行批量数据插入时的性能差异。 ### ...