引言 枚举类型(enum type)是在 Java 1.5 中引入的一种新的引用类型,是由 Java 提供的一种语法糖,其本质是 int 值。...关于其用法之一,便是单例模式,并且在《Effective Java》中有被提到: 单元素的枚举类型已经成为实现 Singleton 的最佳方法 本文便是探究 “为什么枚举是单例模式的最佳方法?”。...本文的内容概要如下: 回顾常见的单例模式方法; 探索 Java 中的枚举是如何防止两种攻击; 若不使用枚举,又如何防止两种攻击。 2....防止反射攻击 从第 2 节中列举的常用单例模式方法,可看出这些方法具有共同点之一是私有的构造函数。这是为了防止在该类的外部直接调用构建函数创建对象了。...,这是为什么,下面深入 ObjectOutputStream 的序列化方法看下 Enum 类型的序列化内容,顺着 writeobject方法找到 writeObject0方法。
其中一种情形是需要编写在 FROM 子句内使用派生表(也称为内联视图)的 Transact-SQL (T-SQL) 查询。...在本期专栏中,我将给出示例并解释它们的使用方法和适用情况。我还将演示 CTE 是如何处理递归逻辑并定义递归 CTE 的运行方式的。...一个方法是创建一个视图,首先收集聚合数据,然后针对该视图编写一个查询。另一个方法是使用派生表针对聚合数据编写一个查询 通过将 SQL 语句移到 FROM 子句中并对其进行查询,可实现这一点。...例如,在图 1 中,已经创建了一个视图,并为另一个 T-SQL 语句所使用。然而,当您想要收集数据并且只使用一次的时候,视图未必是最佳解决方案。...本章节描述了 CTE 的适用情况,以及在 CTE 内什么是可以使用的,什么是不可以使用的。对于初学者来说,可以在 T-SQL 批处理、用户自定义函数、存储过程、触发器或视图中创建并使用 CTE。
旁人认为很奇怪,大家也一定认为很奇怪吧,为什么同样的一个病,同样的症状,会有不同的治疗法子呢?华佗解释了,他说:“倪寻是外实,而立延是内实,所以用了不同的法子。”...当然,每一个领域内还会有一些隐藏的规则,也有人会说是所谓的“潜规则”,这类规则往往不在明面上,比如说你不符合最佳实践编写一段程序,编译不会报错,但因此而引起的性能或是安全性问题就是你需要遵循最佳实践这个...而在SQL Server领域,T-SQL语句到查询结果返回需要经历一个完整的周期,如图1: 图1.T-SQL生命周期 因此,在关系数据库领域,SQL语句的写法只是一个抽象的逻辑,而不是像编程语言那样直接的实现...比如说访问一行数据,如果是编程语言实现,就需要指定连接数据的方式,打开数据,按某个方式取出数据,最后还要关闭连接,而在SQL Server中,T-SQL仅仅是定义如何去获取所需的数据,而无需考虑实现细节...当我们明白了查询分析器对A and B这种写法是如何估计行数之后,那么我们就可以推算出什么情况A and B可能引起执行计划不准确。
[=default] 是参数的默认值. return_data_type 是一个标量的用户定义函数的返回值. function body 指定一系列T-SQL语句....END块,它保存一系列T-SQL语句以创建和插入行盗临时表。临时表被在结果集中返回,并且基于函数中提到的规范创建。 ...以上的语句执行函数。 1、批处理的用途是什么? 2、在批处理中本地变量的范围是什么? 3、存储过程如何返回值? 4、下面的哪个结构被使用,当你需要重复执行一系列T-SQL语句的时候?...6、CASE语句求一系列条件的值并且返回各种可能结果中的一个。 7、你可以在批处理中使用WHILE语句以允许一系列T-SQL语句重复执行,只要给定条件为真。...16、存储过程使用alter procedute语句执行修改 17、用户定函数是一个数据库对象,它包含一系列T-SQL语句。 18、用户定义函数可以返回一个单一标量值或结果集。
他们面临的其中一个挑战是必须将数据库系统迁移到PostgreSQL,以节省许可费用并迁移到更优惠的云平台。...技术挑战 在过去十几年中,该客户在SQL Server积累了大量的用户数据、系统数据,业务代码和测试代码也是面向SQL Server和SQL Server Compact(SQL CE)编写的。...想要将同一套测试运行在两种不同的数据库系统上面,并且只维护一套测试数据,可以尝试下面的方法: 定下测试数据的单一来源 (SSOT)。 开发或者使用一个命令行工具,配合流水线自动转换测试数据文件。...回收存储空间 随着测试的运行,废弃的测试数据会占用越来越多的存储空间。采取什么样的方法进行清理,可以依据测试数据库系统是统一维护,还是安装在测试Agent上来决定。...针对安装在测试Agent上的测试数据库系统,可以创建CronJob来清除数据库。如果测试Agent是早上自动创建、晚上自动销毁的虚拟机,则无须引入清理步骤。
但是并不意味着我们使用多年的T-SQL即将被淘汰,而事实上T-SQL仍然是我们最为常见的基于Database的编程语言。...为了使编程人员更容易地使用T-SQL来实现一些较为复杂的功能,SQL Server 2005在T-SQL进行了一系列的改进,这篇文章将概括性地介绍这些T-SQL Enhancement。...APPLY通常用于这样的场景中:查询的结果一部分包含在一个Table或者View中,另一部分则通过一个TVF来获得,通过TVF获得的记录是基于Table或者View中每条记录的某个Column的数据,也就是说我们把...如果对于某个条记录,TVF发挥的是一个空的Rowset,对于CROSS APPLY,该记录将不会出现在最终的结果中,而对于OUTER APPLY来说,最终的查询结果将包含该条记录,只是基于TVF的Column...2: FROM Production.WorkOrder WorkOrder 3: OUTER APPLY dbo.fn_getproduct(WorkOrder.ProductID) 下面是最终的输出结果
最近在无意中查看国外Azure Analysis Services的资料过程中,发现了Sqlserver一大绝妙方式,直接通过T-SQL,一键零代码开发成本即可完成DAX数据查询结果直接生成到Sqlserver...,同样是Sqlserver的组成部分,所以,就有了下文的可能,直接通过T-SQL,即可完成读取分析服务的数据源(分析服务可扩展为PowerBIDesktop、Azure Analysis Service...登录用户信息 见证奇迹的时候到了,完美使用了DAX查询,返回了数据结果到Sqlserver的当前会话上。...取查询结果 再次让PowerBI群体嗨一下,PowerBIDesktop的数据模型,一样能行。...用个大家喜爱的方法,获取端口号吧,用DAXSTUDIO,可以轻松获得端口号(当然喜欢用Excel催化剂获得,也是很容易的事) DAXSTUDIO获取端口号 Excel催化剂获取端口号 跟着微软爸爸走
巩固 在微软工程院的实习是我研究生阶段的一个非常非常非常重要的转折点: 做出了一个还说的过去的小项目。期间百度实习面试受挫,痛定思痛之下阅读了大量的程序设计书。...依然是以前的傻逼学习方法:反复研读+一遍又一遍的把代码抄写到本子上,艰难的完成了这两本书后,又读了相当数量的编程实践 (Programming Practice)书籍,自我感觉编程能力又大幅提升,此外获得新技能...LL(k) 我在微软实习的第一个项目做的是代码覆盖率分析——计算T-SQL存储过程的代码覆盖率。...阅读了块覆盖的定义后,我发现我需要对T-SQL进行语法分析,在没有找到一个好用的T-SQL Parser的情况下,只能自己动手搞一个: 比较奇诡的是,做这个项目时当时我刚好把ANTLR作者的...结果马上就有各种问题出现——最主要的反映是速度太慢,一些用户甚至反馈按键有时要半秒才有反应。本屌问了下他的通讯录大小:大概3000多人。
巩固 在微软工程院的实习是我研究生阶段的一个非常非常非常重要的转折点: 做出了一个还说的过去的小项目。 期间百度实习面试受挫,痛定思痛之下阅读了大量的程序设计书。...依然是以前的傻逼学习方法:反复研读+一遍又一遍的把代码抄写到本子上,艰难的完成了这两本书后,又读了相当数量的编程实践(Programming Practice)书籍,自我感觉编程能力又大幅提升,此外获得新技能...至少在我看来,什么算法基础内功都是唬人的玩意,多编点能用的实用的程序才是王道,当然如果你是一个pure theorist的话就当我什么都没说好了。...LL(k) 我在微软实习的第一个项目做的是代码覆盖率分析——计算T-SQL存储过程的代码覆盖率。...老大自然是很满意——我疑心他的原计划是花两三个月来完成这个项目,因为这个项目之后的两个月我都没什么活干,天天悠哉游哉。
本系列【T-SQL基础】主要是针对T-SQL基础的总结。...一、事务 1.什么是事务 为单个工作单元而执行的一系列操作。如查询、修改数据、修改数据定义。...3.事务的四个属性ACID (1)原子性Atomicity ? 1.事务必须是原子工作单元。...c.排他锁和其他任何类型的锁在多事务中不能在同一阶段作用于同一个资源。 如:当前事务获得了某个资源的排他锁,则其他事务不能获得该资源的任何其他类型的锁。...其他事务获得了某个资源的任何其他类型的锁,则当前事务不能获得该资源的排他锁。 (2)共享锁 a.当试图读取数据时,事务默认会为所依赖的数据资源请求共享锁。
非法存储:在过去,在商业过程期间,你收集的数据只是你个人的事。但选择在美国,遍及欧盟和可以控制你存储的各种个人信息,你如何存储它,你如何保护它的其他国家里的都有对应的法律存在。...最重要的是,SQL Server的更新已经是微软在线更新的一部分,因此很容易获得安全的更新和补丁。...记住有时候保护数据的最佳方法是直接不把它不放到数据库里——例如,只保存你必须绝对坚持有效的信用卡信息(这样的人并不多)。如果你没有这样的需求,你应该处理信用卡事务,保存结果,而不是信用卡信息本身。...它回答问题,这里现在你能做什么? 组(Group):在Windows里,组是已登录后与它关联的主体。任何授权到组都会授权到组里相关联的登录。...SQL Server安全管理和实现 正如SQL Server里大多数操纵和管理任务,通常安全功能几乎都有很多管理和实现方法,包括使用SSMS的图形界面,编写和执行T-SQL代码,使用在命令行编写PowerShell
本系列【T-SQL】主要是针对T-SQL的总结。 一、SQL Server组成部分 1.关系引擎:主要作用是优化和执行查询。 包含三大组件: (1)命令解析器:检查语法和转换查询树。...使用称为“表格格式数据流”(TDS) 数据包的 Microsoft 通信格式来格式化通信数据。 3.客户端发送TDS包给协议层。协议层接收到TDS包后,解压并分析包里面包含了什么请求。...先在缓冲池的数据缓存中检查是否存在这些数据,如果存在,就把结果返回给存储引擎的数据访问方法;如果不存在,则从磁盘(数据文件)中读出数据并放入数据缓存中,然后将读出的数据返回给存储引擎的数据访问方法。...10.存储引擎的数据访问方法将查询到的结果返回关系引擎的查询执行器。 11.查询执行器将结果返回给协议层。 12.协议层将数据封装成TDS包,然后协议层将TDS包传给客户端。...您的鼓励是作者坚持原创和持续写作的最大动力!
其对两个输入表进行操作,右侧表往往是是一个派生表或者内联的TVF。其逻辑查询处理阶段将右侧表应用到左侧表的每一行,并生成组合的结果集。...在对两个(或多个)查询结果集进行集合操作时,需要注意其中的查询并不支持ORDER BY操作,如果还是需要这样的功能可以使用外部的ORDER BY或者是使用TOP等操作符将返回的游标转化为结果集。...实际SQL SERVER还不支持这种类型的操作,理解起来有点复杂,简单来说就是如果我的子查询A, B都有重复数据,一个是3条,一个是5条, 那么其INTERSECT ALL操作结果应该为3条,EXCEPT...ALL的结果是2条。...),比如SUM(Amount),但现在想对分组内的行记录进行排序,这个更小的操作粒度在过去的SQL中是难以实现的,这是开窗函数却可以完成这部分的工作。
本文介绍基于Microsoft SQL Server软件,实现数据库T-SQL语言程序设计,以及游标的定义、使用与存储过程的创建、信息查找的方法。 ...+STR(@SUM) PRINT'个数是'+STR(@NUMS) (5) 单击“工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图; 2 从学生表S中选取SNO、SN、SEX,若为“男...T-SQL语句,如下图; (3) 首次运行后发现结果中“性别”一栏均为“NULL”,与预期将达到的结果不一致。...通过检查发现自己的T-SQL语句中出现错误,更改后效果如下图; 3 面向复杂应用的T-SQL程序设计方法——查询所有同学选课信息:姓名、课程名、成绩 (1) 单击屏幕上方 “工具栏”菜单中的“新建查询”...通过检查发现自己的T-SQL语句中出现错误,即丢失了CASE,更改后效果如下图; 4 面向复杂应用的T-SQL程序设计方法——为教师增加工资 (1) 在“对象资源管理器”中选择“数据库”→“jxsk”→
大家好,又见面了,我是全栈君 什么是存储过程: 存储过程(Procedure)类似于C#语言中的方法,它是SQL语句和控制流语句的预编译集合。...存储过程可包含逻辑控制语句和数据操作语句,它可以接收参数、输出参数、返回单个或多个结果集以及返回值。...2>允许更快地执行 如果某操作需要大量的T-SQL代码或需要重复执行,存储过程将比T-SQL批处理代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程内存中的版本。...3>减少网络流量 创建使用存储过程后,一个需要数百行T-SQL代码的操作,由一条执行该过程代码的单独语句就可实现,而不需要在网络中发送数百行代码 4>可作为安全机制使用 即使对于没有直接执行存储过程中语句的权限的用户...或使用T-SQL语句,使用Microsoft SQL Management Studio创建存储过程的步骤类似于视图,用于创建存储过程的T-SQL语句为CREATE PROCEDURE。
本系列【T-SQL】主要是针对T-SQL的总结。 一、SQL Server组成部分 1.关系引擎:主要作用是优化和执行查询。 包含三大组件: (1)命令解析器:检查语法和转换查询树。...使用称为“表格格式数据流”(TDS) 数据包的 Microsoft 通信格式来格式化通信数据。 3.客户端发送TDS包给协议层。协议层接收到TDS包后,解压并分析包里面包含了什么请求。...先在缓冲池的数据缓存中检查是否存在这些数据,如果存在,就把结果返回给存储引擎的数据访问方法;如果不存在,则从磁盘(数据文件)中读出数据并放入数据缓存中,然后将读出的数据返回给存储引擎的数据访问方法。...10.存储引擎的数据访问方法将查询到的结果返回关系引擎的查询执行器。 11.查询执行器将结果返回给协议层。 12.协议层将数据封装成TDS包,然后协议层将TDS包传给客户端。...也欢迎园子的大大们指正错误,共同进步。或者直接私信我 声援博主:您的鼓励是作者坚持原创和持续写作的最大动力!
我还将探索SQL注入,并讨论如何避免SQL注入攻击您的动态TSQL代码。 什么是动态TSQL以及为什么你想要使用它? 什么是动态TSQL?动态TSQL是每次运行它时潜在的代码。...通过插入TSQL代码,他们可以愚弄系统返回原本不应该获得的数据,或者更糟的是,对SQL Server数据库运行附加的TSQL命令。...为了防止SQL 注入式攻击,您应该在开发TSQL应用程序代码时考虑以下几点: 避免SQL注入式攻击的最佳方法是不使用动态SQL 编辑用户输入的特殊字符参数,如分号和注释 仅在需要支持用户输入的数据时才能使参数发生...问题1: 避免SQL注入攻击的最佳方法是什么(最好的方法)?...EXEC sp_executesql 答案: 问题1: 正确的答案是a。避免SQL注入式攻击的最佳方法是不允许您的应用程序中的动态TSQL代码。 问题2: 正确的答案是e,以上所有。
命令解析器(Command Parser)检查 T-SQL 语法的正确性,并将 T-SQL 语句转换成可以进行操作的内部格式,即查询树(Query Tree)。...查询优化器(Query Optimizer)从命令解析器处得到查询树(Query Tree),判断查询树是否可被优化,然后将从许多可能的方式中确定一种最佳方式,对查询树进行优化。...优化步骤首先进行规范查询(Normalize Query),可以将单个查询分解成多个细粒度的查询,并对细粒度的查询进行优化,这意味着它将为执行查询确定计划,所以查询优化器的结果是产生一个执行计划(Execution...在完成查询的规范化和最优化之后,这些过程产生的结果将被编译成执行计划(Execution Plan)数据结构。执行计划中包括查询哪张表、使用哪个索引、检查何种安全性以及哪些条件为何值等信息。...· 事务服务(Transaction Services) · 实用工具(Controlling Utilities) 访问方法(Access Methods)包含创建、更新和查询数据的具体操作,下面列出了一些访问方法类型
什么是索引呢,索引是 SQL Server 编排数据的内部方法,他为 SQL Server 提供了一种方法来编排查询数据的路由,从而达到通过使用索引来提高数据库的检索速度、改善数据库性能。...视图的作用就是: 1、筛选表中的数据 2、防止未经允许的用户访问敏感数据 3、将多个物理数据表抽象为一个逻辑数据表 对用户的好处就是:结果更容易理解、获得数据更容易 对开发人员的好处就是:限制数据检索更容易...那为什么需要存储过程呢,因为从客户端(client)通过网络向服务器(server)发送 SQL 代码并执行是不妥当的,导致数据可能会泄露不安全,印象了应用程序的运行性能,而且网络流量大。...使用存储过程的优点就是: 1、模块化程序设计 2、执行速度快、效率高 3、减少网络流量 4、具有良好的安全性 存储过程分为两类:系统存储过程和用户自定义的存储过程 系统存储过程: 是一组预编译的T-SQL...from bank --查看转账事务前的余额 go begin transaction -- 开始事务(指定事务从此开始,后续的T-SQL语句是一个整体) declare @errorsum