MySQL锁的演示(showmysql锁)

MySQL锁是用于解决多用户并发访问数据库中数据安全性问题的机制,它可以保证多个用户对数据库进行并发操作时不会出现数据不一致状态或者数据丢失的情况。下面我将给大家演示一下MySQL锁的使用。

首先,我们在MySQL面板中建立一个名字为“test”的数据库,然后在里面创建一张名字为“test”表,表中有两个字段:“name”和“score”,如下图所示:

![](https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=3efaabfa62f0f736d9fe4d8b5f5f5168/2fdda3cc7cd98d106a3b44e37f3fb80e7bec9002.jpg)

然后,我们在表中插入两条数据,如下图所示:

![](https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=9eb1b85a0624ab18de03359e040396b6/730e0cf3d7ca7bcba556b9aea00baa1cd112a10d.jpg)

接下来,我们从MySQL面板连接两个不同的用户,用于演示并发情况下数据更新,如下图所示:

![](https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=c5757714a50f4bfb85053d19032c9f7f/500fd9f9d72a6059ac77ac7ac4334349b033bba8.jpg)

用户1和用户2同时尝试更新表中的数据:

**// 分别定义两个用户变量**

user1:update test set score = 10 where name = ‘tom’

user2:update test set score = 20 where name=’tom’

**// 分别提交两个用户的更新语句**

user1:commit

user2:commit

此时,系统会根据MySQL的锁机制,先将用户1的update语句套上共享锁,而用户2的update语句受到共享锁的阻塞,如下图所示:

![](https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=105357454c1fdfc03c8b2be989593aa2/e850352ac65c10380ac9f7a071b19313b17e895d.jpg)

随后,用户1在提交更新语句后,用户2才可以进行更新操作,提交完之后,数据表中的score值更新为20,如下图所示:

![](https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=1b3224ae847494ee995061437372288f/ae51f3deb48f8c54c3cdbf7e319eb13532fa4039.jpg)

通过此演示可以看出,MySQL的锁机制可以很好的保证多用户对数据库的并发访问而不出现冲突,而且还有助于数据的安全性。


数据运维技术 » MySQL锁的演示(showmysql锁)