MySQL有三种锁的级别:页级、表级、行级。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS应用软件之一。
用以下sql语句就可以实现行锁定,前提是innodb模式:
SELECT FOR UPDATE
或者
SELECT LOCK IN SHARE MODE
1 使用终端或命令提示符登录到MySQL,输入命令:mysql -h xxxxxxxxxx -P 3306 -u username -p
解释:xxxxxxxxxx是数据库IP地址,username是数据库用户名,输入命令后,会让你输入username对应的密码,就可以登录了
2 如何查看MySQL数据库的死锁信息
在MySQL客户端下输入命令:
show engine innodb status \G;
3 如何定位MySQL数据库的死锁信息
在打印出来的信息中找到“LATEST DETECTED DEADLOCK”一节内容,看图中红线
4 如何分析日志,定位死锁原因
看3里面的图,紫色划线部分
分析:
事务1,等待
RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj``score_user`,这个位置的X锁
事务2,持有
RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj``score_user`这个地方的S锁
事务2,等待这个地方的X锁
理论上这个事务2是可以提交的不会,死锁,但是这个事务日志只打印最后一部分死锁,信息,这里面隐含的条件是,事务1也持有
RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj``score_user`这个地方的S锁,这样,事务2不能加X锁,同时事务1也不能加X锁,产生死锁。
MySQL8x 中新增了一个轻量级的备份锁,它允许在 online 备份的时候进行 DML *** 作,同时可防止快照不一致。这个锁禁止的 *** 作很少,它禁止的 *** 作包括:
文件的创建、删除、改名账户的管理REPAIR TABLETRUNCATE TABLEOPTIMIZE TABLE备份锁由 lock instance for backup 和 unlock instance 语法组成。使用这些语句需要 BACKUP_ADMIN 权限。MySQL 51支持对MyISAM和MEMORY表进行表级锁定,对BDB表进行页级锁定,对InnoDB表进行行级锁定。
如果不能同时插入,为了在一个表中进行多次INSERT和SELECT *** 作,可以在临时表中插入行并且立即用临时表中的记录更新真正的表。
这可用下列代码做到:
mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> INSERT INTO real_table SELECT FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;
以上就是关于下列什么不是mysql数据库锁级别全部的内容,包括:下列什么不是mysql数据库锁级别、Java如何实现对Mysql数据库的行锁、如何查看MySQL数据库的死锁信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)