浅谈表的并发操作和锁定
来源:互联网 发布:matlab三维数组 编辑:程序博客网 时间:2024/04/29 13:27
锁表语句 lock table t (read,read local,write)
lock table t read语句获取只读的锁,得到后就不能对当前进程进行insert和update, 当然别的进程也不能修改,但是别的进程能同时
取得读锁, 所以我们也称读锁 为共享锁, 用read local后别的进程可以增加但是不可以修改,当前进程不能增加修改
1:
一个客户端(session1)
mysql> lock table people read;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into people(username) values('ssss');
ERROR 1099 (HY000): Table 'people' was locked with a READ lock and can't be upda
另开一个客户端(session2)
mysql> insert into people(username) values('ssss');
//处于阻塞状态,等待session1 的进程释放锁
2 : 在lock 后面到 unclock 之间 不能出现没有锁过的表,像下面的 shop
mysql> lock table people read;
Query OK, 0 rows affected (22.51 sec)
mysql> select shopname from shop limit 1;
ERROR 1100 (HY000): Table 'shop' was not locked with LOCK TABLES
write 锁 也称为独享锁,在同一时刻只有一个进程可以得到,所以其他进程对数据的操作都被阻塞,只有本进程才能读写,
一个客户端(session1)
mysql> lock table people write;
Query OK, 0 rows affected (0.00 sec)
另外开一个客户端(session2)
mysql> select username from people limit 1;
//会阻塞状态,等待session1进程释放锁
mysql> lock table people write;
// 想取到write锁的话 也会咬等待session1释放锁
通常情况下,为防止并发的写,可以用read共享锁,为防止并发读,比如多进程读取不能重复的记录,应采用write独占锁。
二:
结合实际情况 我们需要出来本段程序 以外能读出数据(所以不能用write),当前进程里能写(所以不能用read)
以上都是锁住整张表,我们最好能把表的行锁住, 查看资料得 MyAsim 只支持表级锁,InnerDB支持行级锁
修改表的引擎为InnoDB, 使用for update来锁行 ,当操作一个非索引的字段就会自动锁表,而操作一个索引的时候会锁住一行(select * from people where peopleid=11 for update),所以有指明明确主键下是锁行,因为for update 是事务的 所以必须在begin 和commit 里生效,因为是锁行的,所以不会像 write锁那样,一个地方锁住了,另外地方就只有在等锁释放后 才能select数据了
三 在InnoDB里 如果你的autocommit=1 , 用lock table people write锁表,是没有用的,会在锁表后立刻释放表锁定,当你在另外一个session里运行 select username from people limit 1 是没有在等待session1释放锁的
- 浅谈表的并发操作和锁定
- 多用户并发操作一条记录的锁定机制
- 闩锁、锁定和并发性
- 并发和并行浅谈
- 锁定表操作
- Java 8并发教程:同步和锁定
- MySQL的并发访问与锁定
- Android:屏幕的锁定和取消锁定
- Oracle:查找锁定的表和解锁
- Oracle查询表的锁定和解锁
- 浅谈大数据和高并发的解决办法
- 浅谈高并发环境下的服务器和数据库技术
- 关于数据加锁和高并发的浅谈
- 原子操作和线程的并发执行
- SYBASE ASE15.7 锁定和并发控制学习
- 关于sql server的纪录修改冲突解决和oracle的for update 的并发锁定测试
- 锁定与并发
- 锁定与并发
- LifeRay Portal 6学习笔记7:Liferay的一些常见问题
- 给程序员小弟弟小妹妹们的一些总结性忠告
- 使用Jacorb创建固定不变的IOR
- LifeRay Portal 6学习笔记8:Liferay的一些常用工具类
- 海量数据处理的几种方法
- 浅谈表的并发操作和锁定
- samba share files between windows and ubuntu LINUX 文件共享
- linux tar命令
- MATLAB图像处理命令
- linux常用命令
- 写文目的
- [记录]Ceylon:取代java的下一代语言?
- ImageView 设置图片
- “异类” 读后感