lzth.net
当前位置:首页 >> mysql For upDAtE >>

mysql For upDAtE

既可以锁表,也可以锁行,如果查询条件有固定的主键锁行,否则锁表

作用:可以直接修改你 SELECT 出来的数据 现在使用select for update来查询数据,以达到排他读的目的.但是发现,在有正常结果数据时造成的锁表对系统性能有明显地影响. 想过在dao内用synchronized进行同步,但在多台服务器上还是会存在问题. 不知有什么替换方案没? 注:select for update的条件不是主键所以id,所以造成锁表.

可以用事务让两个语句同时执行,也可以用触发器,还有一个方法就是用外键,用触发器和事务比较好

mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表.最常使用的2种

UPDATE的表不能出现在子查询中,你的语句需要修改,例如:UPDATE education SET timeFrom="2007-9-1" WHERE EXISTS (SELECT * FROM education WHERE studentinfo.userName=education.userId) AND studentinfo.userName LIKE "11842%" AND studentinfo.`Class` LIKE "%071%"

update table2 set status = 1 from table1 where table2.id = table1.table2id and table1.table2id = 1--假设n为1,写n是没有结果的,没有table2id=n and table1.status = 1

这个语句是可以运行的,但是只update了b.b1的第一个结果作为update条件,而b.b1是一个数组,有n个结果,这条语句是不能实现我要的效果的,就按照那位仁兄的方法,稍改一下:$ids = implode(",", $display_order); //$display_order就是你放所有要改动的b1的数组update a,b set a.a1=b.b1,a.a2=b.b2,a.a3=b.b3 where a.id=b.id and b.b1 in($ids)

select for update nowait的实现,如果数据库实现不了,其实应用做个超时控制就可以了,把sql执行放到超时控制代码里,具体情况要看开发语言了测试:-- builtin innodbuser@test 10:14:37>set innodb_lock_wait_timeout=1;ERROR 1238 (HY

会的,for update就等于是加上了一个写锁,会把表锁住无法修改

有的.明确指定主键,where id=2; 并且有数据,row lock(行锁)明确指定主键,where id=2; 若没有数据,无lock无主键,table lock(表锁)主键不明确,where id2或where id like '%2%'; table lock(表锁)

fnhp.net | rjps.net | zdly.net | lyxs.net | ddgw.net | 网站首页 | 网站地图
All rights reserved Powered by www.lzth.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com