想把论坛和博客上所有关于mysql的都看一遍,死磕到底

看到关于数据库快照的东西。。。。。。。不懂,百度。。。。。。然后就跑题了,看到了表锁这种东西unlock tables;

用来锁定表。。。。。

mysql> insert into new values('haha'); ERROR 1136 (21S01): Column count doesn't match value count at row 1 mysql> desc new; +-------+-------------+------+-----+---------+-------+ | Field | Type        | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id    | int(11)     | NO   | PRI | NULL    |       | | name  | varchar(20) | YES  | MUL |         |       | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.36 sec)

mysql> insert into new values(1234,'haha'); ERROR 1099 (HY000): Table 'new' was locked with a READ lock and can't be updated

mysql> unlock tables new ; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'new' at line 1 mysql> unlock tables ; Query OK, 0 rows affected (0.00 sec)

mysql> insert into new values(1235,'haha'); Query OK, 1 row affected (0.94 sec)

--lock tables new read;读锁,一旦锁上就不应许其他线程的写操作了。。。

--lock tables new write;xie锁,一旦锁上就不应许其他线程的读操作了。。。

网上还看到这么一句话,可是和我的测试相违背

//注意:user表必须为Myisam表,以上测试才能全部OK,如果user表为innodb表,则lock tables user read local命令可能没有效果,也就是说,如果user表为innodb表,第6时刻将不会被阻塞,这是因为INNODB表是事务型的,对于事务

表,例如InnoDB和BDB,--single-transaction是一个更好的选项,因为它不根本需要锁定表//

违背

看一下我的数据库引擎

mysql> show create table new\G;
*************************** 1. row ***************************
       Table: new
Create Table: CREATE TABLE `new` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

并没有出现异常,innodb数据库引擎也可以使用表锁

推测是数据库版本所产生的差异

mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.15-log |
+------------+
1 row in set (0.00 sec)

再次测试使用myisam

忘记关掉表锁了,还发现了一个问题,不光是表的问题了,而且连数据库表的创建都不被锁定了,超出我的意料。

mysql> create table new3(id int primary key , name varchar(20) default '')engine
=myisam,charset=utf8;
ERROR 1100 (HY000): Table 'new3' was not locked with LOCK TABLES

再次做出推测,不光是数据库的表的整个操作都被干扰 了,只允许read,

测试表的修改是否还可以。

mysql> alter table new1 add haha int;
ERROR 1100 (HY000): Table 'new1' was not locked with LOCK TABLES

果然如此啊,只允许read了,修改,添加,表的结构修改也被锁定了

回来测试myisam

mysql> create table new3(id int primary key , name varchar(20) default '')engine
=myisam,charset=utf8;
Query OK, 0 rows affected (0.06 sec)

添加成功,已经关闭锁了

mysql> show create table new3\G;
*************************** 1. row ***************************
       Table: new3
Create Table: CREATE TABLE `new3` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> insert into new3 values(12346,'asdf');
ERROR 1099 (HY000): Table 'new3' was locked with a READ lock and can't be update
d

无法插入

mysql> update new3 set name = '123dsfv' where id=1;
ERROR 1099 (HY000): Table 'new3' was locked with a READ lock and can't be update
d

无法更新

mysql> alter table new3 add haha int;
ERROR 1099 (HY000): Table 'new3' was locked with a READ lock and can't be update
d

无法修改表

| 1233 | name |
| 1234 | name |
+------+------+
1235 rows in set (0.00 sec)

可以查找

对照博客http://blog.chinaunix.net/uid-21505614-id-289450.html

死磕mysql(4)的更多相关文章

  1. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  2. MySQL强人“锁”难《死磕MySQL系列 三》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 前言 最近数据库 ...

  3. S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  4. 如何选择普通索引和唯一索引《死磕MySQL系列 五》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  5. 五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》

    系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的 ...

  6. 字符串可以这样加索引,你知吗?《死磕MySQL系列 七》

    系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引&l ...

  7. 无法复现的“慢”SQL《死磕MySQL系列 八》

    系列文章 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引< ...

  8. 什么?还在用delete删除数据《死磕MySQL系列 九》

    系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?& ...

  9. MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》

    有一个问题是这样的统计数据总数用count(*).count(主键ID).count(字段).count(1)那个效率高. 先说结论,不用那么花里胡哨遇到统计总数全部使用count(*). 但是有很多 ...

  10. 为什么MySQL字符串不加引号索引失效?《死磕MySQL系列 十一》

    群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案.没错,是因为MySQL内部进行了隐式转换. 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换. 系列文 ...

随机推荐

  1. HDU3652 B-number 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意: 求区间 \([1, n]\) 范围内包含连续的数位"13"并且能 ...

  2. 「Luogu P3183」[HAOI2016]食物链 解题报告

    身为一个蒟蒻,由于刷不过[NOI2001]食物链 于是出门左转写了道另一道假的食物链 戳这里 这里的食物链个条数其实就是有向图的路径数(应该是这么说吧,我弱) 思路: 拓扑(Topulogy)(一本正 ...

  3. MySQL之分库分表(MyCAT实现)

    分库分表介绍 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库. 数据的切分分为两种: 垂直切分:按照业务模块进行切分,将不同模块的 ...

  4. P2871 [USACO07DEC]手链Charm Bracelet(01背包模板)

    题目传送门:P2871 [USACO07DEC]手链Charm Bracelet 题目描述 Bessie has gone to the mall's jewelry store and spies ...

  5. BZOJ 2038: [2009国家集训队]小Z的袜子 (莫队)

    题目传送门:小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… ...

  6. Redis系列(一):Redis简介及环境安装

    提到Redis,大家肯定都听过,并且应该都在项目中或多或少的使用过,也许你觉得Redis用起来挺简单的呀,但如果有人问你下面的几个问题(比如同事或者面试官),你能回答的上来吗? 什么是Redis? R ...

  7. GDAL集成GEOS

    因为要用到缓冲区分析,在使用Buffer的时候提示:ERROR 6: GEOS support not enabled,查了一下资料需要集成GEOS库.因为GDLA默认编译是没有集成GEOS库的. 现 ...

  8. Java 第一次课堂测验

    周一下午进行了开学来java第一次课堂测验,在课堂上我只完成了其中一部分,现代码修改如下: 先定义 ScoreInformation 类记录学生信息: /** * 信1805-1 * 胡一鸣 * 20 ...

  9. TornadoFx学习笔记(1)——常用的代码片段

    Tornadofx是基于JavaFx的一个kotlin实现的框架 之后看情况补充.. 1.读取resources文件夹中的文件 如图 想要读取config.properties文件,有两种方法 在cl ...

  10. 临近年关,修复ASPNETCore因浏览器内核版本引发的单点登陆故障

    临近年关,咨询师提出360,搜狗急速浏览器无法单点登陆到公司核心产品WD, 报重定向过多. 现象 经过测试, 出现单点登陆故障的是搜狗,360等主打双核(默认Chrome内核)的浏览器, 较新式的Ed ...