`
小斌张
  • 浏览: 87578 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

mysql 行锁定、存储过程

阅读更多

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存储引擎.pptx

    InnoDB是事务型数据库的首选引擎,为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎,其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。 ;2.MyISAM

    MYSQL

    5.4.4 存储过程和触发器 5.4.5 外键(Foreign Keys) 5.4.5.1 不使用外键的理由 5.4.6 视图(Views) 5.4.7 '--'作为一个 注解的开始 5.5 MySQL 遵循什么标准? 5.6 怎样处理没有提交/回卷...

    MYSQL优化-一篇很好的优化文章

    18. MYSQL行类型(专指IASM/MYIASM表) 19. MYSQL缓存 20. MYSQL表高速缓存工作原理 21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用...

    Mysql数据库优化详细大全

    18. MYSQL行类型(专指IASM/MYIASM表) 8 19. MYSQL缓存 8 20. MYSQL表高速缓存工作原理 9 21. MYSQL扩展/优化-提供更快的速度 9 22. MYSQL何时使用索引 10 23. MYSQL何时不使用索引 10 24. 学会使用EXPLAIN 10 25. ...

    MySQL中文参考手册.chm

    5.4.4 存储过程和触发器 5.4.5 外键(Foreign Keys) 5.4.5.1 不使用外键的理由 5.4.6 视图(Views) 5.4.7 '--'作为一个 注解的开始 5.5 MySQL 遵循什么标准? 5.6 怎样处理没有提交...

    MySql 5.1 参考手册.chm

    前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 ...11.5. 列类型存储需求 11.6. 选择正确的列类型

    MySQL 5.1中文手冊

    13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和...

    MySQL中文参考手册

    + 5.4.4 存储过程和触发器 + 5.4.5 外键(Foreign Keys) # 5.4.5.1 不使用外键的理由 + 5.4.6 视图(Views) + 5.4.7 '--'作为一个 注解的开始 o 5.5 MySQL 遵循什么标准? o 5.6 怎样处理没有提交/回卷(COMMIT ...

    MySQL性能调优与架构设计(中文版)

     7.1 MySQL锁定机制简介  7.2 各种锁定机制分析  7.3 合理利用锁机制优化MySQL  7.4 小结  第8章 MySQL数据库Query的优化  8.0 引言  8.1 理解MySQL的Query Optimizer  ……  第9章 MySQL数据库...

    MySQL 5.1官方简体中文参考手册

    11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. ...

    MySQL 5.1参考手册

    13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和...

    Mysql数据库锁定机制详细介绍

    MySQL锁定机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。...

    MySQL 5.1参考手册中文版

    13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES...

    MySQL 5.1参考手册 (中文版)

    13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和...

    校园招聘计算机岗位MySQL面试题

    答:MySQL的存储引擎是底层管理MySQL表的程序库,它决定了如何存储、检索和更新表中的数据。MyISAM和InnoDB是两种MySQL的常见存储引擎。两个引擎的主要区别如下: MyISAM:不支持事务和行级锁定,支持全文索引和...

    MySQL性能调优与架构设计.mobi

    同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式企业级数据库集群环境为目标,分析介绍了通过 MySQL 实现这一目标的多种架构方式。主要包括可扩展和高可用两...

    尚硅谷Java视频教程_MySQL高级视频

    · 00.尚硅谷_MySQL高级_源码、课件 · 01.尚硅谷_MySQL高级_课程简介 · 02.尚硅谷_MySQL高级_MySQL简介 · ...尚硅谷_MySQL高级_如何锁定一行 · 62.尚硅谷_MySQL高级_行锁总结 · 63.尚硅谷_MySQL高级_主从复制

    mysql高级视频教程百度云(2019).txt

    61.MySQL高级_如何锁定一行.avi 60.MySQL高级_间隙锁危害.avi 59.MySQL高级_索引失效行锁变表锁.avi 58.MySQL高级_行锁演示答疑补充.avi 57.MySQL高级_行锁案例讲解.avi 56.MySQL高级_行锁理论.avi 55....

    mysql5.1中文手册

    列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. ...

    MYSQL中文手册

    言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 ...13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法...

Global site tag (gtag.js) - Google Analytics