-演示Mysql的死锁的产生及如何释放死锁;
- 创建数据库demo并设置
字符集create database demo charset = utf8;
- 进入演示数据库,
使用demo;
- 创建一张表
create table t1(
int(11)not null default'0 ',
主键(a)
)ENGINE = InnoDB DEFAULT CHARSET = utf8;
- 添加几条数据
插入t1值(1);
插入t1值(2);
插入t1值(3);
插入t1值(4);
- 如果是引擎是myisam是否commit都无效,如果引擎是innodb默认是自动提交事务,查看是否开启
- 显示变量如'%autocommit%'; no表示自动提交
- 查询
select * from t1;
- 演示开始
- 在一个窗口中打开
- 关闭自动提交
- 对行一开始加锁
set autocommit = 0;
select * from t1,其中a ='1'进行更新;
- 在另一个窗口打开
- 关闭自动提交
- 对行二开始加锁
set autocommit = 0;
select * from t1,其中a ='2'进行更新;
- 此时在对调运行,行一和行二的语句会出现锁等待
- 行一
选*来自t1,其中a ='2'进行更新;
- 行二
选*来自t1,其中a ='1'进行更新;
- 出现ERROR 1205(HY000):超出锁定等待超时; 尝试重启事务
- 可以使用下面的三个语句查询打开的表,正在执行的任务和开启的事务
显示OPEN TABLES其中in_use> 0;
show processlist; - kill杀死进程id(id列)
select * from information_schema.innodb_trx; - kill杀死进程id(trx_mysql_threab_id列)
演示Mysql死锁的产生
最新推荐文章于 2023-07-28 18:01:07 发布