当前位置:网站首页>在企业级开发过程中我发现有位同事用select * from where 条件 for update

在企业级开发过程中我发现有位同事用select * from where 条件 for update

2022-06-24 19:50:00 SteveCode.

活动地址:毕业季·进击的技术er

职场 内卷人

在企业级开发过程中我发现有位同事用select * from where 条件 for update

好吧! 今天我就学习了一手 顺便发个帖子。嘿嘿

本人借鉴的文章

菜鸟教程-MySQL 事务

面试官问:select…for update会锁表还是锁行?

开始巴!嘿嘿

看一段sql,感觉一下是不是很懵逼 可能也会有大佬

BEGIN;
SELECT * FROM a WHERE `key`=1 FOR UPDATE;
UPDATE a SET `name`='songxy9991' WHERE `key` =1;
COMMIT;

SELECT @@autocommit;
SET @@autocommit =0;

SELECT * FROM a WHERE `key`=1 FOR UPDATE;
COMMIT;
UPDATE a SET `name`='songxy12' WHERE `key` =1;

我们一个一个的说明

  • 讲到这里 我们就会说到 事务这个 神圣而又伟大。要么成功要么都不成功。原则性、一致性、隔离性、持久性。等等巴,还有事务的隔离级别,还有spring 中的事务的传播特性 都是面试常考点

BEGIN

就是开启事务

COMMIT;

提交事务

SELECT @@autocommit;

查看事务是否静止自动提交事务

autocommit 状态值说明
  • AUTOCOMMIT=0 禁止自动提交
  • AUTOCOMMIT=1 开启自动提交
    修改状态:
  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交
    MySQL数据库默认会是 自动开启事务的

image.png

这边我们就 不让他自动提交事务 给他先禁止掉

SET @@autocommit =0;
SELECT @@autocommit;

image.png

真功夫开始了 哈

  • 建表语句
DROP TABLE IF EXISTS `a`;
CREATE TABLE `a`  (
  `key` int(0) NOT NULL AUTO_INCREMENT,
  `value` char(225) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of a
-- ----------------------------
INSERT INTO `a` VALUES (1, 'ssss', 'songxy12');
INSERT INTO `a` VALUES (2, 'yy', 'songxy');
INSERT INTO `a` VALUES (3, 'sxy', 'songxy');
INSERT INTO `a` VALUES (4, '1111', 'songxy');
INSERT INTO `a` VALUES (5, 'qqq', 'songxy');

SET FOREIGN_KEY_CHECKS = 1;

先看一下我之前表数据

image.png

先通过主键查

SELECT * FROM a WHERE `key`=1 FOR UPDATE;
执行这个sql  我可没有 COMMIT;

image.png

在执行

UPDATE a SET `name`='songxy999' WHERE `key` =1;

去查表数据

image.png

  • 没有发生改变

执行提交事务的语句

COMMIT;

image.png

  • 到底锁的行还是 表 我来试试

image.png

  • 报错了;error

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OPLNv5n5-1655994728162)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4af5d417b96646b0a4a1430460b7d594~tplv-k3u1fbpfcp-watermark.image?)]

看图

image.png

由此可见是锁行

活动地址:毕业季·进击的技术er

原网站

版权声明
本文为[SteveCode.]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_48278764/article/details/125436208