MySql的锁的问题

MySql的锁的问题

对以下创建用户表时的锁的语句不是很明白,

LOCK TABLES `message` WRITE;这个语句是什么意思?如何用?什么情况下用?

UNLOCK TABLES;这个语句是什么意思?如何用?什么情况下用?

为什么要有锁?锁的作用是什么?以及平时如何去使用锁?

下面是MySql创建表的语句

CREATE DATABASE message_board;
use message_board;

DROP TABLE IF EXISTS `message`;

CREATE TABLE `message` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `username` varchar(32) NOT NULL,
  `title` varchar(32) NOT NULL,
  `content` varchar(4096) NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;


LOCK TABLES `message` WRITE;

INSERT INTO `message` VALUES (1,1,'admin','慕课网好','<span clolor=\'red\'>慕课网是垂直的互联网IT技能免费学习网站。以独家视频教程、在线编程工具、学习计划、问答社区为核心特色。在这里,你可以找到最好的互联网技术牛人,也可以通过免费的在线公开视频课程学习国内领先的互联网IT技术。</span>','2017-03-25 22:17:23');

UNLOCK TABLES;

--
-- Table structure for table `user`
--

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  `real_name` varchar(32) DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `phone` varchar(16) DEFAULT NULL,
  `address` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;


LOCK TABLES `user` WRITE;
INSERT INTO `user` VALUES (1,'admin','admin','张三丰','1980-01-01 00:00:00','13800000000','武当山武当观1-1'),(2,'test','test',NULL,NULL,NULL,NULL),(8,'mooc','mooc',NULL,NULL,NULL,NULL);
UNLOCK TABLES;

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,程序中会出现多个程序在极接近的时间连接操作数据库,可以设置事务的隔离级别来解决多个程序访问数据库可能出现的问题。关于事务将会在第四个阶段讲到。jdbc链接MySQL时,MySQL也可以使用锁。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕阿满 2019-10-27 18:24:55

同学你好,LOCK TABLES `message` WRITE是给message表加锁,只在当前窗口可以对message表进行读写操作。新打开一个窗口,无法对该表进行操作。

除非unlock tables;解锁后,其他窗口才能对该表进行操作。unlock tables是解锁的意思。

MySQL中对表加锁可以对表进行限制,比如给表加读锁,LOCK TABLES `message`  read,限制表只能进行读操作,任何对表进行修改的操作都会报错。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 超人迪加123 #1
    窗口指的是JDBC连接MySql的窗口吗?每次执行插入数据操作时先加锁,LOCK TABLES `message` WRITE;,当数据插入结束后再unlock tables;解锁给其他程序使用?
    2019-10-27 21:50:53
  • 好帮手慕阿满 回复 提问者 超人迪加123 #2
    同学你好,这里的窗口是指cmd链接MySQL的窗口。lock给表加锁,当数据插入完毕再unlock tables解锁给其他程序使用,同学理解的不错。祝:学习愉快~
    2019-10-28 09:49:20
  • 提问者 超人迪加123 回复 好帮手慕阿满 #3
    JDBC连接MySql的时,需要使用锁吗?还是只有在CDM命令行操作时才需要用到锁?程序中会不会出现多个程序在极接近的时间或同时连接操作数据库?
    2019-10-28 11:34:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师