首页 - 推荐新闻 - 上海外滩,regret,牡蛎怎么吃

上海外滩,regret,牡蛎怎么吃

发布时间:2019-03-24  分类:推荐新闻  作者:admin  浏览:183

朋友们,我们都知道关系型数据库和NoSQL数据库的最大区别,在于数据的存储和处理方式不同,关系型数据库使用行列二维表存储数据、NoSQL数据库则通过对象存储数据,这个所谓的对象,主要就是指JSON类型的数据。

支持JSON已成为数据库的发展大方向

数据库技术发展到当下,主要有关系型数据库(Relational Database Management System,简称RDBMS)、NoSQL非关系型数据库、以及综合二者优点的NewSQL数据库

关系型数据库的代表包括PostgreSQL、MySQL、MariaDB、SQLite、Oracle、SQLServer等,关系型数据库技术发展非常成熟,也是当前应用的主流。目前在国内MySQL、SQLServer、Oracle用的比较多。

NoSQL数据库的代表主要包括Redis(键值型数据库)、MongoDB、CouchDB(文档型数据库)、Cassandra(列式存储)、Neo4j(图形数据库)等。

关系型数据库的优点是技术成熟、结构简单、原子性和事务支持好等、支持非常丰富的SQL标准语法,缺点是数据存储格式简单、速度不佳;NoSQL的优点是支持json非田开斌标准化数据格式、充分使用内存速度快等,缺点是缺乏统一的SQL标准、对查询的支持有限、对事务的支持不好。NewSQL则是结合二者优点的产物。

NewSQL数据库的代表主要包括TiDB等。TiDB是一颗冉冉升起的新星,这可是咱中国人自己的团队开发的、而且是完全开源的,在Github可以直接Git所有的源代码。TiDB支持的语法格式基本兼容MySQL。TiDB不仅具有NoSQL对海量数据的存储管理能力,还保持了关系型数据库支持ACID和标准SQL等特性。TiDB是中国国产数据库的一面旗帜,我们真应该多了解她、呵护她、应用她。

NewSQL是未来发展的方向,包括现在看似如火如荼的MongoDB、Redis等,都在逐步的向NewSQL技术靠拢。我们能看明白,那些老牌的关系型数据库心里也像明镜一样。比如PostgreSQL,早早的开始全面支持Json,Oracle和SQLServer也在跟进。并不是说这些数据库支持Json就成了NewSQL,这是一个渐进的过程,根据笔者的观察,在未来数年内,当前主流的关系型数据库,都会一步步渐进到NewSQL数据库领域

当前对Json支持最好的主流关系型数据库非PostgreSQL莫属,PostgreSQL号称“世界最先进的开源数据库”,其不但从字段级别支持Json,更提供了大量的Json处理接口函数。虽梁学铭然PostgreSQL在国内被MySQL压制着应用不够广泛,但中cliphunter国人有个特点,一旦认识到好东西,就会一窝蜂的叮上去,只是不知道PostgreSQL会不会这么荣幸了。


SQLServer对Json的支持也很不错,笔者曾经写过《将数据库SQL查询结果直接转为JSON》、《当关系型数据库遭遇JSON——判断篇》、《取值篇》、《对象篇》、《操纵篇》、《行集篇》六文详细阐述MSSQL对JSON的支持。因为内容比较分散,理解起来相对有些凌乱。本文尝试全面阐述MSSQL的JSON支持,希望您能一文玩悟空vpn通上海外滩,regret,牡蛎怎么吃之。

如何在MSSQL中avaaddams存储JSON数据?

说出来您可能不信,MSSQL并不直接支持JSON类型字段,这点确实比不过PostgreSQL来的彻底。在MSSQL中,JSON是作为字符串看待的,所以所有支持字符串的数据类型都可以存储JSON,这似乎是废话。当然,没有JSON类型字段并不代表MSSQL对JSON的支持就不强大。微软官方推荐使用nvarchar(max)或varchar(max)来存放JSON串。youwu

如果您的JSON数据是存放在文件中,要加载到表字段中时,需要使用表值函数OPENROWSET(BULK),如果 SQL Server 对本地驱动器或网络中的任一文件拥有读取访问权限,则该函数可从该文件中读取数据。 该函数返回包含单个列的表,该列包含文件的内容。具体可参看下面的示例脚本:

declare @data table(
FID bigint primary key identity,
FLog nvarchar(max)
);
insert into @data(FLog)
select BulkColumn from
openrowset (bulk 'c:\file.json', single_clob) as t;

如上例所示,通过表值函数openrowset,使用bulk修饰符,single_clob表示将整个文件作为json文本,BulkColumn返回json文本。

如何将查询结果输入为JSON?

SQL Server的select子句for json关键字,可将查询结果直接转为JSON文本。for json子句有三种用法:

  • for json auto子句根据select结构自动将查询结果转为JSON;
  • for json path子句实现输出格式控制,可以创建包装对象并嵌套复杂属性;
  • 以上两种结合root选项,可给输出结果增加顶层节点。

您可以参看《将数据库SQL查询结果直接转为JSON》做更深一步了解。

如何判断字符串是否JSON格式?

判断字符串表达式是否是JSON类型,可使用ISJSON函数。ISJSON语法格式如下:

ISJSON ( expression )

如果字符串表达式包含有效JSON,则返回1;否则,返回0。魔兽世界风神王座入口如果expression为NULL,则返回 NULL。

我们先定义一段JSON,作为例子展开说明:

declare @json nvarchar(max)=N'{
"销售数据": [
{
"FName": "张三",
"FDistrict": "北京",
"FAmount": 20000
},
{
"FName": "李四",
"FDistrict": "深圳",
"FAmount": 40000
}
]
}';

判断的方法很简单,直接如下调用

select isjson(@json)

此时返回值就是1。具体参考下图:

如何读取和解析JSON串?

对JSON字符串的解析,SQL Server提供了json_value、json_query两个解析函数,这两个函数的作用是不同的。

json_value的语法格式为:

JSON_V01095300ALUE(expression,p哈宝530ath) 

expression为包含JSON的表达式,path为JSON的键路径。path的语法格式非常简单,使用$标识根目录,根据层级使用.号隔开键名称,比如“$."销售数据"[1].FName”,表示的是第一组“销售数据”下面的FName键,如果键名称包含Unicode,则需要使用双引号引起来标识其整体性。

json_value返回的是具体的标量值。

比如针对前例的@json进行解析,下面是正确的写法:

select json_value(@json,'$."销售数据"[0].FName');

而下面的写法是错误的:

select json_value(@json,'$."销售数据"[0]')郭燕芸;
select json雷晓晨_value(@json,'$."销售数据"');

为何?因为键路径对应的不是标量值,而是对象或者数组。

您可以参看《当关系李淑显型数据库遭遇JSON——取值篇》做更深一步了解。

json_query的语法格式为:

JSON_QUERY (expression[,path])

expression为包含J色皇宫SON的表达式,path为JSON的键路径。

json_query返回的不是具体的标量值,而是JSON的子对象或数组。还用上面的例子,使用json_天天干天天射value错的情况换作json_query恰恰是正确的:

select json_query(@json,'$."销售数据"[0]');
select json_query(@json,'$."销售数据"');

前者返回的是对象,后者返回的是数组,如下图所示:

您可以参看《当关系型数据库遭遇JSON——对象篇》做更深一步了解。

如何修改JSON键值?

SQL 蔡壁名Serv汇众教育是真是假er提供了json_modify函数修改JSON标量值。其语法格式为:

JSON_MODIFY(expression,path,new当拜金女遇到钻石男Value) 

expression为JSON表达式,path为键路径,newValue为要修改的新值。

返回值为修改后的JSON。

还用前面的@JSON串做例子,比如我们要修改“张三”的销售额:

set @json=json_modify(@json,'$."销售数据"[0].FAmount',60000);

path参数支持append修饰符,指定将新值追加到通过引用的数组的可选修饰符。

您可以参看《当关系型数据库遭遇JSON——操纵篇》做更深一步了解。

如何将JSON转换为行集?

openjson为行集函数,可将JSON拉平成二维表格。openjson支持默认架构和显示架构两种方式。

默认架构的语法格式为:

select * from openjson(expression,path)

显示架构是带有with子句的行集调用,with用忧思华光玉攻略来定义明确的输出表结构,语法格式为:

select * from openjson(expression,path)
with(field1 path1,...)

还是上面的JSON串为例,如下脚本就把数组中的键拉平成二维表:

select * from ope不言春风njson(@json,'$."销售数据"')
with(
FName nvarchar(20),
FDistrict nvarchar(20),
FAmount decimal(28,10)
);

您可以参看《当关系型数据库遭遇JSON——行集篇》做更深一步了解。


相信通过上述分析,您对SQL Server的JSON支持已经基本掌握了。