注意:数据库中所有关于锁的一些问题,都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的!都是在事务中讨论的! 因此,对于Innodb存储引擎,必须先将自动提交功能关闭 set autocommit=0
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,'田伯光');
共享的意思就是这个表加了读锁,这个读锁也共享给了其他的表,所以其他的表也能够读, 加了读锁,写的操作一概不能执行,自己也不能执行写的操作,更不要提其他的表了
排他锁,就是独自占有的意思,不会共享给其他人,自己一个人拥有,自己可以写操作,也可以读操作,其他的线程不会拥有这个写锁,所以就更不要提读了
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);