• SqlServer体系结构


    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;
  • 相关阅读:
    18.8.29 考试总结
    18.8.28 考试吐槽
    18.8.27 考试总结
    18.8.26 考试总结
    long long 读数scanf的转换 #define
    神奇的NOIP模拟赛 T3 LGTB 玩THD
    神奇的NOIP模拟赛 T2 LGTB 学分块
    神奇的NOIP模拟赛 T1 LGTB 玩扫雷
    POJ 3264 Balanced Lineup 线段树 第三题
    HDOJ 1754 I Hate It 线段树 第二题
  • 原文地址:https://www.cnblogs.com/dehigher/p/10612371.html
Copyright © 2020-2023  润新知