Mysql锁问题

mysql锁问题

  • 锁的概述
  • Mysql锁
  • MylSAM锁
    • 如何加表锁
  • InnoDB锁问题

锁的概述

Mysql锁问题_第1张图片
注意:数据库中所有关于锁的一些问题,都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的! 因此,对于Innodb存储引擎,必须先将自动提交功能关闭 set autocommit=0

Mysql锁

MylSAM锁

MyISAM存储引擎只支持表锁,这也是MSQL开始几个版本中唯一支持的锁类型

如何加表锁

MylSAM在执行查询语句( SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作( UPDATE、 DELETE、 INSERT等)前,会自动给
涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用 LOCK TABLE命令给MSAM表员式加锁

显示加表锁语法

加读锁
lock table table name read:
加写锁
lock table table name write i

522读锁案例
准备环境



--注意啊!!!建表的时候表名和字段名都不要加引号,要用英文封号;结尾
create database demo_001 default charset=utf8mb4;
use demo_001;
CREATE TABLE tb_book(
id INT (11) auto_increment,
name VARCHAR(50) DEFAULT NULL,
publish_time DATE DEFAULT NULL,
status CHAR(1) DEFAULT NULL,
PRIMARY KEY (id)
)ENGINE=myisam DEFAULT CHARSET=utf8;


INSERT INTo tb_book (id, name, publish_time, status) VALUES(NULL, 'javasE3A8','2088-08-01', '1');
INSERT INTO tb_book (id, name, publish_time, status) VALUES (NULL, 'solrsE', '2088-08-08','0');



CREATE TABLE tb_user (

id INT(11) auto_increment,
name VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)

) ENGINE=myisam DEFAULT CHARSET=utf8;

INSERT INTO tb_user(id, name) VALUES(NULL,'令狐冲');
INSERT INTO tb_user(id, name) VALUES(NULL,'田伯光');

共享的意思就是这个表加了读锁,这个读锁也共享给了其他的表,所以其他的表也能够读, 加了读锁,写的操作一概不能执行,自己也不能执行写的操作,更不要提其他的表了

排他锁,就是独自占有的意思,不会共享给其他人,自己一个人拥有,自己可以写操作,也可以读操作,其他的线程不会拥有这个写锁,所以就更不要提读了
Mysql锁问题_第2张图片
Mysql锁问题_第3张图片Mysql锁问题_第4张图片

InnoDB锁问题

Mysql锁问题_第5张图片Mysql锁问题_第6张图片Mysql锁问题_第7张图片

create table test(

id int(11) ,

name varchar(16),

sex varchar (1)

)engine = innodb default charset=utf8;

insert into test values(1, '100','1');
insert into test values(3,'3','1');
insert into test values(4, '400','0');
insert into test values(5, '500','1');
insert into test values(6,'600' , '0' );
insert into test values(7, '700','0');
insert into test values(8,'800','1');
insert into test values(9, '900', '1');
insert into test values(1, '200','0');

create index idx_test_id on test(id);

create index idx_test_name on test(name);


Mysql锁问题_第8张图片Mysql锁问题_第9张图片
当索引失效的时候,行锁就会变为表锁

Mysql锁问题_第10张图片Mysql锁问题_第11张图片Mysql锁问题_第12张图片Mysql锁问题_第13张图片

你可能感兴趣的:(mysql,数据库,sql)