liunx中mysql版本为5.7存储引擎为innodb中行锁和表锁
查看事物是开启还是没有开启;
show variables like “autocommit”;
set autocommit=0,
当前session禁用自动提交事物,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务。
start transaction
指的是启动一个新事务。
在默认的情况下,MySQL从自动提交(autocommit)模式运行,这种模式会在每条语句执行完毕后把它作出的修改立刻提交给数据库并使之永久化。事实上,这相当于把每一条语句都隐含地当做一个事务来执行。如果你想明确地执行事务,需要禁用自动提交模式并告诉MySQL你想让它在何时提交或回滚有关的修改。
执行事务的常用办法是发出一条START TRANSACTION(或BEGIN)语句挂起自动提交模式,然后执行构成本次事务的各条语句,最后用一条COMMIT语句结束事务并把它们作出的修改永久性地记入数据库。万一在事务过程中发生错误,用一条ROLLBACK语句撤销事务并把数据库恢复到事务开始之前的状态。
START TRANSACTION语句"挂起"自动提交模式的含义是:在事务被提交或回滚之后,该模式将恢复到开始本次事务的START TRANSACTION语句被执行之前的状态。(如果自动提交模式原来是**的,结束事务将让你回到自动提交模式;如果它原来是禁用的,结束当前事务将开始下一个事务。)
如果是autocommit模式 ,autocommit的值应该为 1 ,不autocommit 的值是 0 ;请在试验前 确定autocommit 的模式是否开启
查看SQL的存储引擎;
show engines;
存储引擎是innodb,使用分享锁lock in share mode;
当session2中插叙加上lock in share mode 会一直等待,和不加共享锁的得到的数据是不一样的;
测试engines引擎为innodb的存储
在引擎为innodb时索引为判断条件在加上排他锁for update 这就是行锁
在引擎为innodb时索引判断条件不是索引时加上排它锁for update 这就是表锁
也就是整个表都锁住了,调用表中其他行的数据也是不行的
给表中的字段添加索引:
alter table user add unique index_id(id);
常用的集中添加索引的方式: