MySQL中select * for update锁表的范围 MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住). 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键. 例1: (明确指定主键,并且有此笔资料,row lock) SELECT…
mysql在Update带有子查询的时候,子查询的表会锁住,导致该表无法使用.比如 update A set comments = (select count(1) from B where id = A.id) where id = 123; 把B表给锁住了.   而在Oracle里不存在这种情况 . 最后发现 mysql 默认的隔离级别是REPEATABLE-READ,oracle默认数据隔离级别是 READ-COMMITTED .所以在mysq中 update ... select * f…
下面这些sql都含有子查询: mysql> select * from t1 where a in (select a from t2); mysql> select * from (select * from t1) as t; 按返回的结果集区分子查询 1.标量子查询 那些只返回一个单一值的子查询称之为标量子查询.比如: select * from t1 where a in (select max(a) from t2); 2.行子查询 返回一条记录的子查询,不过这条记录需要包含多个列.…
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条记录由谁创建. 创建新用户时,根据当前登录用户的uin及新创建的用户uin,有如下SQL: , 结果: 那么修改的create_user_uin_tree的标识SQL为: ,) ; 报错信息: Error Code: 1093. You can't specify target table 'sys…
子查询和表连接  ①.查询挣钱最多的人的名字  SELECT ename,sal FROM emp  WHERE sal=(SELECT MAX(sal) FROM emp);  ②.查询有哪些人的工资位于全部人的平均工资之上  SELECT ename,sal FROM emp  WHERE sal > (SELECT AVG(sal) FROM emp);  ③.求部门中哪些人的薪水最高:  SELECT ename,sal FROM emp  JOIN (SELECT MAX(sal) m…
子查询 把一个sql语句放在括号里 ,这个括号里sql语句查询结果其实就是一张表,并且是一个临时在内存里存在的虚拟表 可以用括号把一个查询sql语句括起来 得到查询的结果并且用as 为这张虚拟表起个别名,那这张表就可以当做一张真正的表去查询 可以用作为另外一条sql语句查询 表可以跟自己做连接…
子查询指的是用括号括起来,并嵌入另一条语句里的那条 SELECT 语句.下面有一个示例,它实现的是找出与考试类别('T')相对应的所有考试事件行的 ID,然后利用它们来查找那些考试的成绩: SELECT * FROM score WHERE event_id IN ( SELECT event_id FROM grade_event WHERE category = 'T' ) ; 1.1 带关系比较运算符的子查询 运算符 =.<>.>.>=.< 和 <= 可用来对值之…
)*0.05 WHERE card_id ='20121xxxxxx'; //子查询就是一个嵌套先计算子查询 SELECT * FROM borrow WHERE book_id =(SELECT book_id FROM bookinfo book_name ='xxxxxx') ) FROM bookinfo);//显示小于平均图书价格的图书信息 SELECT * FROM bookinfo WHERE book_category_id <> (SELECT category_id FRO…
所以可以将 in 条件中 子查询转换成一张子表,从而通过 join 的形式进行条件限制.…
前言: 1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据. 2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程. 3.如果是JOIN的话,它是走嵌套查询的.小表驱动大表,且通过索引字段进行关联.如果表记录比较少的话,还是OK的.大的话业务逻辑中可…