1、SQL的ABC 特色

(1) Application 应用:理念是提供软件、硬件、服务在内的完整解决方案

(2) Box盒子: 传统部署方式、部署在企业内部、

(3)Cloud: 私有云 、公有云;私有云性能是有限的、公有云Azure Sql ,软硬件、运维、HADR 、更新都由微软负责

2、Azure Sql

(1)Azure SQL (概念性服务器)有多个数据库、但一次只能连接一个数据库,客户不能在数据库之间切换,也不能编写多数据库查询

(2)Azure SQL 引擎 是一种专用引擎,但使用了相同的代码基、实现T-SQL 功能与本地化实现一致

(3)有一些内部部署的SQL server t-sql 尚未在 Azure Sql 中没有

3、Sql Server 实例

(1) Sql Server 实例是一个已安装的SQLServer数据库引擎或服务

(2)可以在同一台计算机上安装多个Sql Server 实例、在安全、数据、资源上实例之间相互独立在逻辑级别上,驻留在同一台计算机上的两个实例、和驻留在两个计算机上的实例没有不同之处

(3)一台计算机上只有一个Default 实例(默认实例)、其他都是默认实例、在安装是确定是默认还是命名、后面不能改

(4)连接默认实例、客户端只需指定ip 、连接命名实例,则需要指定 ip\实例名称

4、数据库

(1)数据库是一个对象容器、包含表、视图、存储过程、其他对象

(2)一个数据库实例中可以包含多个数据库 、包括系统数据库和用户数据库

(3)系统数据库有master 、resource 、model 、tempdb 、msdb ,但是在Azure Sql 中客户端只能连接master

(4) 在一个实例中可以定义多个用户数据库

(5)排序规则Collation 通常在数据库级别定义、确定语言支持、区分大小写、排序规则

5、数据文件和事务日志文件

(1)数据库有数据文件Data.mdf 和 事务日志文件TransactionLog.ldf 组成

(2)Sql server 可以并行的写入数据文件、但是只能串行的写入事务日志文件,因此,与数据文件不同,事务日志多并不能提高写入性能

(3)在创建数据库的时候可以为每个文件(数据文件、日志文件)定义属性、包括名称、初始大小、最大大小、自动增量

(4)多个数据文件被组织成“文件组” ,对象(表、视图。。。)被分散在文件组中的文件中

(5)一个数据库中至少有一个名为primary 的文件组,可以指定哪个文件组作为默认文件组

(6)如果创建对象的时候没有显示的指定目标文件组,那么默认放在默认文件组中

(6)创建对象可以通过选择文件组、进行物理布局

(7)Auzre Sql 不需要用户关注数据文件和日志文件的布局

(8)文件后缀: .mdf 代表主数据文件(不要与主数据库文件混淆)、.ldf代表日志数据文件 、.ndf 表示不是主数据库文件

5、登录安全

(1)连接数据库实例,必须先创建一个“Login”

(2)Login 绑定windows 登录凭证、这种称为“windows 身份验证登录”、登录时不需Login name、password

(3)Sql server 身份验证登录、需要提供用户名密码、需要将Login映射到每一个数据库用户、数据库用户被授予访问数据库中对象权限

6、架构与对象

(1)数据库是对象容器其实是简化说法、数据库包含架构、架构包含对象

(2)架构才是对象(表、视图。。。)的容器

(3)可以在架构级别控制权限、如授予用户对架构的select权限、因此对架构的划分,安全是一个考量因素

(4)架构是一个命名空间、通常被用作对象名称的前缀 dbo.XXX ,dbo 是架构 架构名称、这种写法叫做架构限定式对象名称

(5)引用对象时,如果省略的架构、Sql server 会在默认架构中找对象、如果没有再去dbo 架构中找

(6)由于省略架构限定寻找的过程需要耗费一定性能、所以sql server 建议始终使用架构限定式对象名称

7、表定义

use TSQL2012;
if object_id('dbo.Employees','U') is not null
drop table dbo.Employees;
create table dbo.Employees (
empid int not null,
firstname varchar(30) not null,
lastname varchar(30) not null,
hiredate date not null,
mgrid int null,
ssn varchar(20) not null,
salary money not null
);

(1)定义表要确定数据库、架构

(2)使用( ) 而不是{ }

(3)use 数据库名称 语法在Azure Sql中 不支持、但是当选中库后执行不会报错、可用于确保创建对象时连接到了正确的数据库

(4)if 函数调用了 object_id(object_name ,type) 函数、入参为(对象名称、对象类型),U 表示用户数据库 ,该函数存在返回object_id ,否则返回null

(5)  如果没有显示的指定是否允许为NULL标记、Sql Server 不得不依赖默认值。默认值为(NULL) ,强烈建议显示定义、不依赖默认值

8、数据完整性

8.1 完整性说明

(1)关系模型最大好处之一就是数据完整性

(2)数据完整性作为模型的一部分实施、即作为表定义的一部分,这被称为“声明式数据完整性”

(3)数据完整性已代码方式实施、如存储过程、触发器、这被称为“过程式数据完整性”

8.2 主键约束

(1)主键约束强制唯一性、主键不允许是用null 标记 、每张表只能有一个主键

(2)为保证主键的强制唯一性、sql server 会在后台建立唯一索引、唯一索引,是SQL server保证强制唯一性的物理机制

(3)sql

alter table Employees
add constraint PK_Employees
primary key(empid);

8.3 唯一约束

(1)与主键不同,表中可以有多个唯一键

(2)与主键不同 ,唯一键可以为null

(3) sql

alter table Employees
add constraint UNQ_Employees_ssn
unique(ssn);

8.4外键约束

(1)外键约束强制引用完整性

(2)sql

if object_id('dbo.Orders','U') is not null
drop table dbo.Orders;
create table dbo.Orders
(
orderid int not null,
empid int not null,
custid varchar(10) not null,
orderts datetime2 not null,
qty int not null,
constraint PK_Orders primary key(orderid)
); alter table dbo.Orders
add constraint FK_Orders_Employees
foreign key(empid)
references dbo.Employees(empid); alter table dbo.Orders
add constraint FK_Orders_Employees
foreign key(mgrid)
references dbo.Employees(empid);

(3)外键引用操作

No action : 当删除父表记录被引用,无法删除

cascade : 级联删除

set default 、set null : 级联操作设置外键值为default 、null

(4)外键列允许为null ,当为null的时候产生孤立行

8.5 check 约束

(1)为列定义一个谓语,insert 、update ,必须满足该谓语要求

(2)sql

alter table dbo.Employees
add constraint CHK_Employees_salary
check(salary>0);

(3)当谓语计算为False 拒绝插入更新、当计算结果为True 或 unknown 时,修改会被接受, 如上面当salary 为 null 时 会接受

8.6 默认约束

(1)是默认值表达式

(2)sql

alter table dbo.Orders
add constraint DFT_Orders_orderts
default(sysdatetime()) for orderts;

SqlServer体系结构的更多相关文章

  1. Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记1

    一.理论背景:关系模型,其数学理论是集合论和谓词逻辑. 1.集合论:集合定义是把我们直观或思维中确定的,相互间有明确区别的那些对象视为一个整体,这个整体就是集合. 2.谓词逻辑:谓词是判断对象是否有某 ...

  2. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  3. Oracle体系结构详解

    对于一门技术的学习,尤其是像Oracle database这种知识体系极其庞杂的技术来讲,从宏观上了解其体系结构是至关重要的.同时,个人认为,未必是专业DBA人员才需要了解其体系结构(固然对于数据库专 ...

  4. 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)

    解剖SQLSERVER 第十二篇   OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...

  5. (转)对SQLSERVER数据库事务日志的疑问

    本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...

  6. SQLSERVER性能监控级别步骤

    SQLSERVER性能监控级别步骤 下面先用一幅图描述一下有哪些步骤和顺序 1.识别瓶颈 识别瓶颈的原因包括多个方面,例如,资源不足,需要添加或升级硬件: 工作负荷在同类资源之间分布不均匀,例如,一个 ...

  7. 擦亮自己的眼睛去看SQLServer之简单Select(转)

    摘要:这篇文章主要和大家讨论几乎所有人都熟悉,但不少人又陌生的一条select语句. 这篇文章主要和大家讨论几乎所有人都熟悉,但不少人又陌生的一条select语句.不知道大家有没有想过到底是什么东西让 ...

  8. Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL

    今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统.初步想法是通过建立一个小的Tomcat webapp,进而通过JDBC访问这三个后台数据库,并根据返回的数据生成 ...

  9. Moebius实现Sqlserver集群~介绍篇

    今年是一个不平凡的一年,接触到了很多新艳的,让人兴奋的东西,虽然自己的牙掉了两颗,但感觉自己又年青了两岁,哈哈!进入正题,今年公司开始启用数据库集群,对于Sqlserver来说,实现方式并不是很多,一 ...

随机推荐

  1. Linux下如何拷贝整个目录下的所有文件

    分类: Linux使用2014-01-14 13:38 1449人阅读 评论(0) 收藏 举报 如何在Linux下拷贝一个目录呢?这好像是再如意不过的问题了.比如要把/home/usera拷贝到/mn ...

  2. spring切面编程

    xml配置实现 先写三个类 public String amethod(String s) {  System.out.println("This is AAAAAAAAAAAAAAAA&q ...

  3. Java笔记--多线程

    1.线程的创建与运行(方式一): --1)创建一个Thread的子类: --2)重写Thread类的run()方法: --3)创建一个子类的对象: --4)调用线程的start()方法来启动线程,Ja ...

  4. Day6 - A - HH的项链 HYSBZ - 1878

    ------------恢复内容开始------------ HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.H ...

  5. springboot 中单机 redis 实现分布式锁

    在微服务中经常需要使用分布式锁,来执行一些任务.例如定期删除过期数据,在多个服务中只需要一个去执行即可. 以下说明非严格意义的分布式锁,因为 redis 实现严格意义的分布式锁还是比较复杂的,对于日常 ...

  6. 反射①:如何获取class对象六种方法

    获取class对象的六种方法 了解:class类——是Java反射机制的入口,封装了一个类或接口的运行信息,通过调用Class类的方法可以获取这些信息,其特点如下: 1.该类在java.lang包中: ...

  7. ROM与RAM

    今天小姐姐来问我关于ROM.RAM和Flash的区别,我给她大致的说了一下名称和作用.可人家说她知道这玩意的名字,希望我能够接地气的解释一下什么是ROM.RAM.FLASH…… 这就把我难住了 ≧ ﹏ ...

  8. 关于如何实现一个Saga分布式事务框架的思考

    关于Saga模式的介绍,已经有一篇文章介绍的很清楚了,链接在这里:分布式事务:Saga模式. 关于TCC模式的介绍,也已经有一篇文章介绍的很清楚了,链接在这里:关于如何实现一个TCC分布式事务框架的一 ...

  9. jsp与spring mvc后台controller间参数传递处理之总结

    在编程过程中,最容易出现问题及卡壳的地方,往往是各层之间接缝处,接缝处往往存在着各种各样的参数传递,数据转换和格式化,参数很好的传递并正确接收过来之后就是复杂逻辑之间的处理了,所以为了避免多种问题占用 ...

  10. arduino 通过串口接收string,int类型数据

    串口接收string类型数据源码如下 String comdata = ""; void setup() {     Serial.begin(9600); }   void lo ...