sqlserver浅谈

Sqlserver

一、Sqlserver简介

SQL Server一开始并不是微软自己研发的产品,而是当时为了要和IBM竞争时,与Sybase合作所产生的,其最早的发展者是Sybase[1],同时微软也和Sybase合作过SQL Server 4.2版本的研发,微软亦将SQL Server 4.2移植到Windows NT(当时为3.1版),在与Sybase终止合作关系后,自力开发出SQL Server 6.0版,往后的SQL Server即均由微软自行研发。

在与微软终止合作关系后,Sybase在Windows NT上的数据库产品原本称为Sybase SQL Server,后来改为现在的Sybase Adaptive Server Enterprise

Sqlserver 6.0之前版本都是与sybase联合研发,在SQL Server for Windows NT之后从sybase手中买断sqlserver著作权开始自主研发。Sqlserver 2017开始支持linux系统。

二、Sqlserver架构

Sqlserver架构与mysqloracle不同(在SQL 2000数据库用户名称架构是绑定的,一个完整的表的名称包括服务器名.数据库名.用户名.对象名2005时为服务器名.数据库名.架构名.对象名2008版本之后取消了用户和其创建对象的关联),在一个sqlserver实例下可以创建多个数据库实例,每个数据库实例中可以创建多个模式,模式下才有表和视图

 

Sql Server只保存视图的元数据,用户描述这个对象,以及它所包含的列,安全,依赖等。当你查询视图时,无论是获取数据还是更新数据,Sql server都用视图的定义来访问基础表视图在我们日常操作也扮演着许多重要的角色,比如可以利用视图访问经过筛选和处理的数据,而不是直接访问基础表,以及在一定程度上也保护了基础表。

视图的作用:

1、视图隐藏了底层的表结构,简化了数据访问操作,客户端不在需要知道底层的结构及其之前的关系。

2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)

3、加强了安全性,时用户只能看到视图所显示的数据

4、视图还可以被嵌套,一个视图中可以嵌套另一个视图

 

三、使用

连接工具:Navicat、Microsoft SQL Server Management Studio,推荐使用后者,毕竟这是微软专门配套的工具。通过Microsoft SQL Server Management Studio导出表结构、数据都是很容易实现的。右键点击库名选择任务-->生成脚本-->点击下一步选择需要导出的表或者视图(选择导出结构还是数据)-->一直下一步就可以了。最后脚本会导出到指定的文件夹下。

1、Join

对于普通的增删改查与其他数据库没有多大区别,而且在sqlserver中可以跨模式、跨库进行关联查询。

跨模式:

 

跨库:

 

 

同一库下跨模式需要带上模式名,跨库关联需要带上库名、模式名。

另外我们可能会遇到数据是汉字乱码的情况,这时需要我们修改sqlserver编码,

对某个库设置编码sql:

 

将数据先设置为单用户模式,修改字符编码后在设置为多用户模式。若不先设置为单用户模式数据库被占用无法修改编码。

2、查看执行计划

对图中这条sql查看执行计划(点击上方工具栏显示估计的执行计划,也可以使用快捷见Ctrl+L)如下图:

 

 

从图中可以得出以下几点信息:

1)、各阶段执行开销

2)、各阶段执行什么样的操作

3)、各阶段数据量(通过线条粗细来表示的)

通过这些信息对一些慢查询做针对性的优化非常有帮助。

3、元数据查询

 在日常开发中,我们可能对数据的关注的会比较多,但是对于元数据多一些了解对于开发是很有帮助的。这里简单介绍一下sqlserver的元数据管理。

(1)、获取库下所有用户表(u:用户表,s:系统表)

select Name from sysobjects where xtype='u' and status>=0;

 (2)、获取某一个表的所有字段

 select name from syscolumns where id=object_id('表名')

3)、查询用户创建的所有数据库

select d.*,s.name from master..sysdatabases D join master..syslogins s on d.sid=s.sid;

 (4)、查询某一个表的字段和数据类型

select * from information_schema.columns where table_name = 'student_type';

除此之外,还有两个语句可以获取比较详细的信息:

1)sp_help tableName

 

2)sp_columns tableName

推荐使用sp_help tableName,获取的信息比较全面。

有时我们还需要获取表、字段相关的注释信息,可使用如下sql:

表注释:

SELECT

a.NAME,

b.VALUE

FROM

sys.TABLES a

JOIN sys.extended_properties b ON a.object_id = b.major_id

JOIN sys.SCHEMAS c ON c.schema_id = a.schema_id

WHERE

b.minor_id = '0'

AND c.NAME = 'dbo'

AND a.NAME = 'student_type';

  

字段注释:

SELECT

b.NAME,

a.VALUE

FROM

sys.extended_properties a

JOIN sys.COLUMNS b ON a.minor_id = b.column_id

WHERE

a.major_id = OBJECT_ID ( 'dbo.student_type' )

AND b.object_id = a.major_id;

  

了解相关元数据信息有时会为我们带来很多便利。同时也能更有效的利用数据库帮助我们处理相关业务。

四、数据库对比

这里主要对三大数据库作比较:mysql、mssql、oracle

 

mysql

mssql

oracle

 

 

 

优点

存储、响应快,支持多种语言,用户安全性高,是较为单纯的数据存储

提供一整套的数据解决方案,良好的读写性能。容易维护监控支持扩展sql语法。存储过程支持图形化编辑界面记录

支持用户选择不同解决方案,安全性高,性能高效稳定,风险低,扩展、伸缩行好

 

缺点

不支持热备,没有存储过程记录

安全性地,多用户时性能低,伸缩扩展行不是很好

价格贵,成本高。管理维护比较麻烦,操作复杂,技术要求高

 

posted @ 2019-05-20 21:13  力扛九鼎  阅读(511)  评论(0编辑  收藏  举报