想把论坛和博客上所有关于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. Python第一天哇

    iDLE的清除方法ctrl+: 当然,你首先要把网上百度到那个文件按照步骤加上去啦  我百度的=-=:https://www.cnblogs.com/stuqx/p/7291933.html Pyth ...

  2. CodeIgniter框架多条件搜索查询分页功能解决方案

    最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...

  3. Mybatis是如何实现SQL防注入的

    Mybatis这个框架在日常开发中用的很多,比如面试中经常有一个问题:$和#的区别,它们的区别是使用#可以防止SQL注入,今天就来看一下它是如何实现SQL注入的. 什么是SQL注入 在讨论怎么实现之前 ...

  4. 【原创】(十五)Linux内存管理之RMAP

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  5. 28.python操作excel表格(xlrd/xlwt)

    python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...

  6. ubuntu(linux)虚拟主机部署桌面,使用window链接

    买的ubuntu只有命令行,想安装一个桌面,远程操控 网上教程很多,我主要遇到一个问题,百思不得其解 之间安装的不是连接超时,就是拒绝连接 又重新参考这篇博客安装后才解决 说一下大致流程,详细的见这位 ...

  7. 应届生/社招面试最爱问的几道Java基础问题

    本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...

  8. Navicat10.1.11使用记录

    设计表的时候有个允许空值(null),如果不勾选,则无法插入null(但是可以插入‘null’),且默认值不能为null: 如果某个字段没有设置默认值,而插入时又没有给此字段赋值,则会提示warnin ...

  9. http GET 和 POST 请求的优缺点和误区 --前端优化

    Get和Post在面试中一般都会问到,一般的区别:(1)post更安全(不会作为url的一部分,不会被缓存.保存在服务器日志.以及浏览器浏览记录中)(2)post发送的数据更大(get有url长度限制 ...

  10. 【聚类评价】Calinski-Harabaz(CH)

    Calinski-Harabaz(CH) CH指标通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值 ...