摘要:原文:http://blog.csdn.net/xifeijian/article/details/20313977#t10mysql innodb的锁是通过锁索引来实现的。select for update . 排它锁举例。如果字段没有索引,即使使用wehre条件也会进行表级锁如果有索引,会锁定对...
阅读全文
摘要:原文地址 :http://blog.sina.com.cn/s/blog_4c197d420101awhc.html事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)原子性(Autmic):事务在执行性,要做...
阅读全文
摘要:锁详解:http://blog.csdn.net/xifeijian/article/details/20313977http://www.cnblogs.com/zhangpengme/archive/2011/11/24/2261625.htmlhttp://www.cnblogs.com/zh...
阅读全文
摘要:问题 : 1.什么是内连接(inner)和外联结(outer) 2. SQL server 表连接 (FROM--AND 法, JOIN -- ON 法)的区别. 3.表连接及多表连接的SQL语句执行顺序,和性能调优.1.第一个问题,首先要明白如何使用JOIN 和 ON 关键字作表连接。 申明:下文中所用的等价,可能指的是逻辑上的等价(即产生相同的结果集),也可能是执行顺序上的等价,甚至是所产生的执行计划或者执行效率等价。因为很多时候用户只要写普通的sql ,而sql server 会跟据自己的优化 配置和执行计划,产生执行步骤,这些步骤也许和你写的sql很符...
阅读全文
摘要:1. 用一条SQL语句查询出每门课都大于80分的学生姓名name kechengfenshu 张三 语文81张三 数学75李四 语文76李四 数学90王五 语文81王五 数学100王五 英语90 方法一: 思路:如果能获得一张表,由学生姓名,语文成绩,数学成绩,英语成绩的表,剩下的就是在WHERE条件中筛选及可以获得想要的结果。 具体办法:通过自连接的办法,以“姓名”为连接条件,自连接三次,便可以获得包含又姓名和三门课程成绩的数据行。虽然可以得到想要的数据列。但会有很多冗余重复列! 点评:此方法是根据题目,依题解题,中规中矩! 不过多张表连接非常耗费时间。而且SQL语句也比较复杂,需要...
阅读全文
摘要:今天本来是测试一段代码,然后用到Distinct关键字,查看执行计划之后,突然发现过程中有对表进行sort! 上网搜索和加之验证得出如下结果: 结论: 1.使用distinct 关键字后会对distinct后面用到的关键字进行默认的升序排序. 2.可以使用order by 来改变排序规则. 3.使用distinct后,出现在order by 中的字段必须要写在 SELECT 句中,非充要条件。 求问各大神:如何消除distinct自动排序,及为什么要进行排序,还有distinct是如何做到消除重复列的! 另: //Wrong SQLSELECT DISTINCT field_...
阅读全文
摘要:默认情况下,推荐使用 IS NOT NULL去判断因为SQL默认情况下对 != Null 的判断会永远返回0行,但没有语法错误。如果你一定想要使用!= Null来判断,需要加上这个语句:set ANSI_NULLS off这时你会发现IS NOT NULL 和 != null 是等效的。
阅读全文
摘要:1)、当在SELECT子句使用连接符“+”连接表达式时,如果有一列为NULL,则得到的结果也为NULL,当与NULL值作运算时,情况同上(逻辑运算符OR运算时除外,当TRUE OR NULL时,结果为TRUE,但FALSE OR NULL时结果为UNKNOW)2)、在ORDER BY 子句中,NULL值被认为是最小可能(即,如果是升序排序 ,则NULL会排在第一位)3)、NULL的判断不能简单的用=或!= 而只能使用IS (NOT) NULL来判断,可以使用ISNULL函数来对NULL值进行替换(即第一个参数为NULL式,将其替换为第二个参数的值)4)、在连接语句(外连接中),左表或右表失配的
阅读全文
摘要:【SQL定义】SQL中, NULL 与空格, 零, 都不相同. 是指为未定义或是不可用的.构成因素:造成某一列成为NULL 的因素可能是:(1),值不存在;(2), 值未知;(3), 列对表不可用.它与普通的值最大的异同是:相同点:1:统统属于值范畴.数字1是一个值,字符串'aaa'同样是一个值,同理 null也是一个值.2:都是合法的值,普通的数字,字符可以存在于表中字段,null也可以,而且是有意义的.不同点:先创建测试表:USE [myTestDB]GO/****** 对象: Table [dbo].[testNull] 脚本日期: 10/11/2008 13:45:14
阅读全文
摘要:SQL中Case的使用方法Case具有两种格式。简单Case函数和Case搜索函数。--简单Case函数CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女'ELSE '其他' END这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是
阅读全文
摘要:in 适用于 外大内小, 而exists适用于 外小内大!假设如下应用:两张表——用户表TDefUser(userid,address,phone)和消费表TAccConsume(userid,time,amount),需要查消费超过5000的用户记录。用exists:select * from TDefUserwhere exists (select 1 from TAccConsume where TDefUser.userid=TAccConsume.userid and TAccConsume.amount>5000)用in:select * from TDefUserwhere
阅读全文