2021
07-30
07-30
如何自己动手写SQL执行引擎
目录前言整体结构MySQLProtocol结构B+Tree的磁盘结构事务支持尾声前言在阅读了大量关于数据库的资料后,笔者情不自禁产生了一个造数据库轮子的想法。来验证一下自己对于数据库底层原理的掌握是否牢靠。在笔者的github中给这个database起名为Freedom。整体结构既然造轮子,那当然得从前端的网络协议交互到后端的文件存储全部给撸一遍。下面是Freedom实现的整体结构,里面包含了实现的大致模块:最终存储结构当然是使用经典的B+树结...
继续阅读 >
Mod(a,b)在sql中的意思是a/b的余数(即a%b)基础用法:如果id需要是偶数或者奇数时就可以使用mod。mod(id,2)=1是指id是奇数。mod(id,2)=0是指id是偶数。selectmod(3,2)fromdual执行如图:例如:根据身份证判定该员工是否是男女,从而实现对性别的更新。身份证号的第17位数字,奇数为男性,偶数为女性SEXCHAR(1)NOTNULL,--**性别:1男,2女UPDATEtable_nameSETSEX=(CASEWHENmod(identifynumber[17],2)=...
背景:做SQL查询时会经常需要,把查询的结果拼接成一个字符串。解决方法:通过group_concat函数拼接的结果很长,导致拼接结果显示不全,可以通过以下方法解决。在每次查询前执行SETSESSIONgroup_concat_max_len=10240;或者SETGLOBALgroup_concat_max_len=10240;使得查询结果值变大。补充:SQLserver的拼接SQL如下:selectstuff((select','+requestidfromnccombinedpaymentforxmlpath('')),1,1,'')asrequestid...
SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想获取的数据,这就是所谓的SQLInjection,即SQL注入。一背景假如某高校开发了一个网课系...
在日常使用数据库时,你在意过NULL值么?其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧;小伙伴想精准查找自己想看的MySQL文章?喏→ MySQL专栏目录|点击这里在查询数据库时,如果你想知道一个列(例如:用户注册年限USER_AGE)是否为NULL,SQL查询语句该怎么写呢?是这样:SELECT*FROMTABLEWHEREUSER_AGE=NULL还是这样?SELECT*FROMTABLEWHEREUSER_AGEISNULL当然,正确的写法...
🍺不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。学至于行之而止矣。——荀子大家好!我是只谈技术不剪发的Tony老师。在使用SQL语句实现分页查询时,我们需要知道一些额外的参数信息,例如查询返回的总行数、当前所在的页数、最后一页的页数等。在传统的实现方法中我们需要执行额外的查询语句获得这些信息,本文介绍一种只需要一个查询语句就可以返回所有数据的方法,也就是通过SQL窗口函数实现高效的分...
SQLServer2014三大新特性:集成内存OLTP、BI和混合云搭建,那么记录一下我们的安装过程及配置。软件环境准备SQLServer2014版支持的操作系统有:WindowsServer2008、WindowsServer2008R2、WindowsServer2012、WindowsServer2012R2。标准版还支持Windows7、Windows8、Windows8.1操作系统。安装.NetFramework3.5sp1如果本机没有.NetFrameWork3.5sp1,在安装过程中会有以下报错:如果操作系统是WindowsSer...
子查询可以完成SQL查询中比较复杂的情况,本章主要介绍一些子查询的简单用法。一、简单子查询1、简单子查询子查询是SELECT语句内的另外一条SELECT语句。通常,语句内可以出现表达式的地方都可以使用子查询。另外,子查询可以从任何表中提取数据,只要对该表有适当的访问权限即可。因此,通过在一个查询内或者在另一个子查询内嵌套子查询,可以从两个或多个表中组合信息而不必编写复杂的整个组合表,然后再过滤掉多余的或不相...
1.需求背景系统程序突然报错,报错信息如下:Thetransactionlogfordatabase'@dbname'isfull.Tofindoutwhyspaceinthelogcannotbereused,seethelog_reuse_wait_desccolumninsys.databases此时查看log文件,已达2T。当时的紧急处理方案是,移除掉镜像,修改数据库恢复模式(由full修改为simple),收缩日志。为了防止类似问题再次发生,需对log文件的大小进行监控,当到达阈值后,触发告警。2.主要基础组件...
今天给大家介绍SQLServer中交叉联接的用法,希望对大家能有所帮助!1、交叉联接(crossjoin)的概念交叉联接是联接查询的第一个阶段,它对两个数据表进行笛卡尔积。即第一张数据表每一行与第二张表的所有行进行联接,生成结果集的大小等于T1*T2。select*fromt1crossjoint22、交叉联接的语法格式select*fromt1crossjoint2;--常用写法select*fromt1,t2;--SQL:1989的规范select*fromt1crossjoint2wheret1.co...
打开sqlserver时提示评估期已过解决方法:打开sqlserver安装中心(注意:选择R2的安装中心)选择版本升级中途可能会出现需要重启计算机,那么请重启计算机后在进行以上操作点击确定,然后进行下一步,直到需要输入密钥SQLServer2008Developer(开发版):PTTFM-X467G-P7RH2-3Q6CG-4DMYBSQLServer2008Enterprise(企业版):JD8Y6-HQG69-P9H84-XDTPG-34MBB继续进行下一步,直到这里,需要选择第一个mssqlserver,只有这个升级成...
1GETDATE()返回当前系统日期SELECTGETDATE()2DATEADD(日期部分,常数,日期)返回将日期的指定日期部分加常数后的结果返回常数为正SELECTDATEADD(YY,1,GETDATE())等同于SELECTDATEADD(YEAR,1,GETDATE())常数为负数SELECTDATEADD(YY,-2,GETDATE())常数为小数(直接舍去小数部分)SELECTDATEADD(YY,2.4,GETDATE())SELECTDATEADD(YY,2.5,GETDATE())SELECTDATEADD(YY,2.6,GETDATE())3DATEDIFF(日期部分,日期1,日期2)返回两个...