想把论坛和博客上所有关于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. 洛谷$P$4137 $Rmq\ Problem / mex$ 主席树

    正解:主席树 解题报告: 传送门$QwQ$ 本来以为是道入门无脑板子题,,,然后康了眼数据范围发现并没有我想像的那么简单昂$kk$ 这时候看到$n$的范围不大,显然考虑离散化?但是又感觉似乎布星?因为 ...

  2. SpringBoot拦截器没有生效的原因

    最近的一个项目中,需要实现一个记录系统请求日志的功能,我通过拦截器实现了这个功能,但是,测试的时候发现拦截器没有发挥作用,检查了很久,没有发现错的地方,系统也没有报错,最终在网上找打了答案. 原来之前 ...

  3. JVM探秘:GC日志收集与分析

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 收集GC日志 不同的垃圾收集器,输出的日志格式各不相同,但也有一些相同的特征.熟悉各个 ...

  4. Qt5学习(2)

    1.学习了qt quick application 这是一种跟application不同的设计方式.主要就是靠“拖拖拽拽”,然后设置属性(颜色,大小),布局(margins等),然后要注意控件的从属关 ...

  5. CSS3(5)---伸缩布局(Flex)

    CSS3(5)---伸缩布局 有关页面布局之前写过三篇相关文章: 1.CSS(5)---盒子模型 2.CSS(6)---浮动(float) 3.CSS(8)---定位(position) 一.什么是F ...

  6. vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多

    一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...

  7. Longhorn入门级教程!轻松实现持久化存储!

    介 绍 在本文中你将学会如何使用k3s在Civo上运行Longhorn.如果你还没使用过Civo,可以到官网注册(https://www.civo.com/ )还可以申请免费的使用额度.首先,需要一个 ...

  8. 最大区间和变形 - codeforces

    题意 : 可以选择操作一串区间,将区间内的某一个数全部变成一个新的数字,询问整个区间中某个数字的出现次数总共有多少个? 思路分析 : 首先最后选的一定是一个区间,然后 ans = cnt(1, l-1 ...

  9. mysql复习2

    -- 1. 创建和管理表 CREATE TABLE -- 方式一:CREATE TABLE emp1( id INT(10), `name` VARCHAR(20), salary DOUBLE(10 ...

  10. 使用使用django-cors-headers解决跨域问题

    安装 pip3 install -i https://pypi.douban.com/simple django-cors-headers 注册App INSTALLED_APPS = [ ... ' ...