在右侧命令行中编写代码,开启两个命令行窗口连接数据库,体验共享锁的使用,(当一个事务 A 连接在做更新操作的时候,另一个事务 B 连接不能进行更新操作,事务 A 提交后,事务 B 则可进行更新操作并提交,此时更新操作不会被丢失),具体操作如下: 点击+添加一个命令行窗口,在两个命令行中连接数据库(用户名为root,密码为123123); 假设源命令行窗口为 A 连接,新增加的窗口为 B 连接, ,请在 A 中连接数据库后,执行平台 /data/workspace/myshixun/src/step3/table.sql的 sql文件,将会为你创建好mydb数据库和account表,执行命令为: source /data/workspace/myshixun/src/step3/table.sql; 在 A、B 连接中均开启事务,使用共享锁查询account表中原有余额,并在 A 连接中将 id为1的余额改为0,id为2的余额改为200,在 B 连接中将id为2的余额改为0。 此时 B 连接中在等待 A 连接的更新操作完成(提交事务),先后将事务 A 、B 提交即可,平台将输出你更新后的用户余额。 测试说明 平台会对你编写的代码进行测试: 预期输出: +----+------+-------+ | id | name | money | +----+------+-------+ | 1 | A | 0 | | 2 | B | 0 | +----+------+-------+
时间: 2023-12-10 19:38:15 浏览: 232
抱歉,我是一个语言模型,无法在命令行中进行操作。但是,我可以提供一些SQL语句的示例,以帮助您理解共享锁的使用。
首先在A连接中开启事务,使用共享锁查询account表中原有余额,并将id为1的余额改为0,id为2的余额改为200:
```
START TRANSACTION;
SELECT * FROM account WHERE id IN (1, 2) LOCK IN SHARE MODE;
UPDATE account SET money = CASE id WHEN 1 THEN 0 WHEN 2 THEN 200 END WHERE id IN (1, 2);
```
然后在B连接中开启事务,使用共享锁查询account表中原有余额,并将id为2的余额改为0:
```
START TRANSACTION;
SELECT * FROM account WHERE id = 2 LOCK IN SHARE MODE;
UPDATE account SET money = 0 WHERE id = 2;
```
此时B连接中在等待A连接的更新操作完成(提交事务)。先后将事务A、B提交即可,平台将输出你更新后的用户余额:
```
COMMIT; -- 提交事务A
COMMIT; -- 提交事务B
SELECT * FROM account;
```
预期输出:
```
+----+------+-------+
| id | name | money |
+----+------+-------+
| 1 | A | 0 |
| 2 | B | 0 |
+----+------+-------+
```
阅读全文