随笔分类 -  数据库

对关于数据库文章的管理
摘要:select * from productstockquantity t where (select count(1) from productstockquantity where t.CombinationId = CombinationId AND t.StoreFrontId = Store 阅读全文
posted @ 2017-12-11 17:20 那就让我这样吧 阅读(4909) 评论(1) 推荐(0)
摘要:1 普通sql语句可以用exec执行,如: 2 字段名,表名,数据库名之类作为变量时,必须用动态sql 可以使用这样动态拼接: 注意:也可以使用 exec sp_executesql 形式 3 输入或者输出参数 动态查询语句变量:必须为ntext,nchar,nvarchar类型 设置动态语句中的查 阅读全文
posted @ 2016-08-05 14:28 那就让我这样吧 阅读(20977) 评论(0) 推荐(1)
摘要:存储过程中执行动态sql语句MSSQL提供了两种方式:exec和sp_executesql通常后者更有优势,提供了输入输出接口,而exec没有sp_executesql的最大优点是能够重用执行计划,大大提高了执行性能,所以尽量使用sp_executesql,它也更灵活 1 exec的使用 exec有 阅读全文
posted @ 2016-08-04 18:14 那就让我这样吧 阅读(8349) 评论(0) 推荐(0)
摘要:数据库快照:是数据库某一时间点的视图,快照涉及最初目的是为了报表服务,快照还可以和镜像结合来达到读写分离的目的 数据库快照:是sqlserver数据库的只读静态视图快照的作用:1 提供了一个静态的视图来为报表服务2 可以利用数据库快照来恢复数据库,相比备份来说,这个速度大大提高3 和数据库镜像结合, 阅读全文
posted @ 2016-07-29 10:54 那就让我这样吧 阅读(4651) 评论(0) 推荐(1)
摘要:sqlserver2008之后引入Grouping sets是group by的增强版本,Grouping sets 在遇到多个条件时,聚合是一次性从数据库中取出所有需要操作的数据,在内存中对数据库进行聚合操作并生成结果,而union all是多次扫描表,将返回结果进行union,这也就是为什么gr 阅读全文
posted @ 2016-07-28 17:53 那就让我这样吧 阅读(594) 评论(0) 推荐(0)
摘要:大多数数据库需要同时处理多个查询,这些查询并不会像车等待红绿灯排队等待,而是会寻找最短的路径执行,因此需要一个红绿灯进行约束,这个红绿灯就是锁 理论上所有的事务之间应该是完全隔离的,但是事实上隔离的成本实在太高(必须是序列化的隔离级别才能完全隔离)sqlserver通过锁告诉所有并发的连接,在同一个 阅读全文
posted @ 2016-07-28 17:27 那就让我这样吧 阅读(276) 评论(0) 推荐(0)
摘要:事务的四个特性: 原子性,一致性,持久性,隔离性 原子性: 原子性:表示事务执行是作为原子,不可分割,整个语句要么执行,要么不执行sqlserver中每一个单独的语句可以看做是包含在事务中每一句本身具有原子性,要么执行,要么不执行,不会有中间状态 例如:上面例子的约束,执行插入3成功执行,但是插入4 阅读全文
posted @ 2016-07-28 16:28 那就让我这样吧 阅读(479) 评论(0) 推荐(0)
摘要:索引: 在sqlserver中,存储的单位最小是页,页是不可再分的B树:初衷是减少对磁盘的扫描次数,如果一个表或者索引没有使用B树(对于没有聚集索引的表是使用 Heap 堆进行存储的),那么查找一个数据,需要在整个表包含的数据库页中进行全盘扫描,这大大增加了IO负担打包sqlserver使用B树进行 阅读全文
posted @ 2016-07-28 15:14 那就让我这样吧 阅读(240) 评论(0) 推荐(0)
摘要:对于sql来说查询的思维方式的面向集合对于游标来说:思维方式是面向行的 性能上:游标会吃更多内存,减少可见的并发,锁定资源等 当穷尽了while循环,临时表,表变量,自建函数,或其他方式仍然无法实现某些查询的时候,可以考虑使用游标 游标的生命周期由5部分组成: 游标可以很简单,也可以很复杂,取决于游 阅读全文
posted @ 2016-07-28 14:22 那就让我这样吧 阅读(506) 评论(0) 推荐(0)
摘要:了解通用表达式: 为了让代码简洁:在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解,但是视图是系统级对象,如果数据集仅仅需要在存储过程或是自定义函数中使用一次的话,使用view有些奢侈哈 所以可以考虑用公用表达式:可以看做是一个临时的结果集,可以在select ,insert,upda 阅读全文
posted @ 2016-07-28 11:26 那就让我这样吧 阅读(419) 评论(0) 推荐(0)
摘要:可以看作是定义在sqlserver上的虚拟的表,本身并不存储数据,仅仅存储一个select语句和涉及的表的引用 通过视图,客户端不再需要知道底层表结构和其之间的关系,视图提供了一个统一访问数据的接口 视图优点:1 隐藏了底层的表结构,简化了数据访问操作2 使用视图,方便权限管理,让用户对视图有权限而 阅读全文
posted @ 2016-07-26 17:48 那就让我这样吧 阅读(245) 评论(0) 推荐(0)
摘要:数据集分四类: 1.A∩B,既是所求数据集既在A中,又在B中 2.A∪B,既所求数据在数据集A中,或在数据集B中 3.A-B,既所求数据在数据集A中,不在数据集B中 4.B-A,既所求数据在数据集B中,不在数据集A中 和数学一样 数据集:参与数据集运算的两个数据集可以来自任何返回数据集的表达式:一张 阅读全文
posted @ 2016-07-26 17:06 那就让我这样吧 阅读(1004) 评论(0) 推荐(1)
摘要:变量:分为全局变量和局部变量全部变量:以@@声明,为系统变量,所有实例都能访问,用户只能访问,不能赋值局部变量:生命周期只在一个批处理内有效, 局部变量经常使用的三种用途:1 在循环语句中记录循环的次数或者用户控制循环的次数2 用于控制流程走向 比如 if (@i =1)3 存储 存储过程或者函数的 阅读全文
posted @ 2016-07-26 16:40 那就让我这样吧 阅读(383) 评论(0) 推荐(0)
摘要:流程控制语句只能在单个批处理段,用户自定义函数和存储过程中使用不能夸多个批处理或者用户自定义函数或者存储过程 批处理:一个或者多个语句组成的一个批处理,是因为所有语句一次性地被提交到一个sql实例,如果想让多个语句多次提交到sql实例,则需要go关键字,可以看做是一个批处理结束的标识符,当遇到go, 阅读全文
posted @ 2016-07-26 11:35 那就让我这样吧 阅读(186) 评论(0) 推荐(0)
摘要:Case表达式可以用在 Select,update ,delete ,set,in,where ,order by,having子句之后, 只是case表达式不能控制sql程序的流程,只能作为基于列的逻辑使用 也可以这样写: case表达式分两种:简单表达式:将某个表达式与一组简单表达式进行比较以确 阅读全文
posted @ 2016-07-26 11:18 那就让我这样吧 阅读(1362) 评论(0) 推荐(0)
摘要:理解子查询: 理解子查询: 多表连接查询往往也可以用子查询进行替代 子查询本质是嵌套进其他 select update insert Delete 语句的一个被限制的select语句,在子查询中,只有下面几个子句可以使用: 1 select 子句(必须)2 From 子句(必须)3 where 子句 阅读全文
posted @ 2016-07-25 18:21 那就让我这样吧 阅读(530) 评论(0) 推荐(0)
摘要:聚合函数:就是按照一定的规则将多行(Row)数据汇总成一行的函数,对数据进行汇总前,还可以按特定的列(coloumn)将数据进行分组(group by)再汇总,然后按照再次给定的条件进行筛选 一:Count函数1 SELECT COUNT(Birthday) FROM customer2 SELEC 阅读全文
posted @ 2016-07-25 17:45 那就让我这样吧 阅读(545) 评论(0) 推荐(0)
摘要:在sqlserver中,数据库在硬盘的存储方式和普通文件存储一样,仅仅几个文件而已,sqlserver通过管理逻辑上的文件组的方式来管理存储数据的文件, 如图: 文件组管理着磁盘上的文件,而文件中存放着sqlserver的实际数据 为什么通过文件组来管理文件?使用文件组可以隔离用户和文件,使得用户针 阅读全文
posted @ 2016-07-25 13:10 那就让我这样吧 阅读(1994) 评论(0) 推荐(0)
摘要:sqlserver:数据存储方式:最小单位是页,每一页8k,sqlserver 对页的读取是具有原子性,也就是说,要么读取完整一页,要么完全不读取,不会有中间状态,而页之间的数据组织结构是B树 但是每一页的实际存储数据:8K= 8192字节-96字节(页头) - 36字节(行偏移) = 8060字节 阅读全文
posted @ 2016-07-25 11:14 那就让我这样吧 阅读(292) 评论(0) 推荐(0)
摘要:with t as (select * from emp where depno=10) 总结:可以看做将查询出来的语句块表示为一个临时表 select * from t where empno=xxx union all sum(col1) as colsum from t 在这里就可以直接使用这 阅读全文
posted @ 2016-07-04 15:25 那就让我这样吧 阅读(958) 评论(0) 推荐(0)