mysql锁-从实战中理解( 二 )


思考:一:当我把delete语句中的时间范围缩小时,还是会锁住刚插入的记录吗?答案是不会的,只会锁住符合条件的记录 。我想这也是符合预期的锁记录 。
二:思考1)、把插入语句和删除语句调换位置
在事务中先执行删除,虽然说session2也会产生锁等待,但是session1同样可以提交不会报错
2)、删除不能使用二级索引,应尽量使用聚簇索引
3)、如果初始化记录中的id不连续,sessio1执行delete语句的时候是不是不会锁住插入的记录
Session1
Session2
Locks
begin;
begin;
 
insert into ep(e_id, name, create_at) values(100, 'stt', '2022-12-04 00:00:00');
 
 
 
insert into ep(e_id, name, create_at) values(100, 'ssd', '2022-12-04 00:00:00');
 
select * from epG;
id: 1
e_id: 100
name: shijie
create_at: 2022-12-01 00:00:00
update_at: 2023-01-01 05:31:13
id: 2
e_id: 100
name: jianfeng
create_at: 2022-12-02 00:00:00
update_at: 2023-01-01 05:31:13
id: 3
e_id: 100
name: syx
create_at: 2022-12-03 00:00:00
update_at: 2023-01-01 05:31:13
id: 4
e_id: 100
name: stt
create_at: 2022-12-04 00:00:00
update_at: 2023-01-01 05:41:47
select * from epG;
id: 1
e_id: 100
name: shijie
create_at: 2022-12-01 00:00:00
update_at: 2023-01-01 05:31:13
id: 2
e_id: 100
name: jianfeng
create_at: 2022-12-02 00:00:00
update_at: 2023-01-01 05:31:13
id: 3
e_id: 100
name: syx
create_at: 2022-12-03 00:00:00
update_at: 2023-01-01 05:31:13
id: 5
e_id: 100
name: ssd
create_at: 2022-12-04 00:00:00
update_at: 2023-01-01 05:44:46
 
delete from ep where e_id=100 and create_at <= '2022-12-02 00:00:00';
 
no lock
三:如何解决先说下最终的解决方式是删除事务和删除动作;删除动作是通过另外的任务去执行 。




推荐阅读