【997755.com澳门葡京】从入门到明白,学习笔记

《SQL Server 从入门到通晓》

《SQL Server 从入门到了然》

在网络笔试中,常遇到数据库的难题,遂来不难总括,注意,以 Sql Server 数据库为例。

在互连网笔试中,常遇到数据库的标题,遂来大致统计,注意,以 Sql Server 数据库为例。

第2章 数据库基础

第2章 数据库基础

数据库

数据库系统,Database
System,由数据库和数据库管理体系组合。
数据库,DataBase
,是电脑应用连串中的一种尤其管理数据能源的系统,按照数据结构来公司、存储和治本数据的堆栈。数据表是最中央的数据库对象,是储存数据的逻辑单元。

数据库管理连串,DataBase Management
System,DBMS,管理数据库,负责数据的囤积、安全、一致性、并发、复苏和做客。

数据模型,常常由数据结构、数据操作和完整性约束三部分构成。

数据库

数据库系统,Database
System,由数据库和数据库管理种类整合。
数据库,DataBase
,是总结机应用系统中的一种专门管理数据能源的连串,根据数据结构来协会、存储和保管数据的堆栈。数据表是最中央的数据库对象,是储存数据的逻辑单元。

数据库管理连串,DataBase Management
System,DBMS,管理数据库,负责数据的仓储、安全、一致性、并发、苏醒和走访。

数据模型,经常由数据结构、数据操作和完整性约束三有个别构成。

1.2 数据库的体系布局

1.2 数据库的种类布局

SQL语言

结构化查询语言,Structured Query
Language,SQL是一种数据库查询和顺序设计语言,用于存储数据以及询问、更新、管理关全面据库系统,高级的非进程化编程语言。Transact-SQL是微软对SQL的壮大,具有SQL的主要特色,同时扩大了变量、运算符、函数、流程控制和注释等语言成分。
SQL语言分四类:数据定义语言[DDL]、数据查询语言[DQL]、数据操纵语言[DML]、数据控制语言[DCL]。

– [1].DDL(Data Defination
Language)
      style=”color: blue;”>创制和保管数据库中的对象,定义SQL方式以及数据库、表、视图和目录的创制和撤回。不需COMMIT。
     创建CREAT,  修改ALTER,  删除DROP,  删除TRUNCATE
     TRUNCATE,  RENAME

– [2].DQL(Data Query
Language)
     基本结构: SELECT子句、FROM 子句、WHERE子句组成查询块。
     SELECT<字段名表>,  FROM<表或视图名>,  
WHERE<查询条件>

– [3].DML(Data Manipulation
Language)
      style=”color: blue;”>直接操作数据表中的数码,依据要求摸索、插入、删除数据以及更新数据库.
     操作的单位是记录。DML须要COMMIT显式提交。
     插入INSERT,   删除DELETE,  更新UPDATE

– [4].DCL(Data Control
Language)
     用于授予或裁撤对用户对数据库对象的拜访权限,有限匡助数据安全性。
     授权GRANT,  取消授权REVOKE,  显式限制权力集合DENY

事情控制语言TCL (Transaction Control Language)
提交COMMIT,回滚ROLLBACK,设置保存点SAVEPOINT
SQL>COMMIT:显式提交
SQL>ROLLBACK:回滚命令使数据库状态回到上次最后交给的情事
SQL>SET AUTOCOMMIT ON:自动提交
接纳SQL命令直接达成:隐式提交。

1.
数据类型

 1. 字符数据类型
  a. 字符串:char、varchar、text;
  b.
Unicode字符串:nchar、nvarchar、ntext,用N标识,unicode是联合字符编码标准,
双字节对字符(英文,汉字)编码;
   使用Unicode数据类型,可以最大限度地扫除字符转换的难点。
 2. 数字数据类型
  a. 整数型:tinyint(1)、smallint(2)、int(4)、bigint(8);
  b.
Decimal和numeric:固定精度和小数位数,decimal(p,s)或numeric(p,s),0≤s≤p;
  c. 货币类型:smallmoney(4)、money(8);
  d. 近似数字:float、real(4);
  e. bit类型:0/1序列;
 3. 日期和时间数据类型
  time、date、smalldatetime、datetime、datetime2、datetimeoffset;
 4. 二进制数据类型
  binary、varbinary;
 5. 其余数据类型
  uniqueidentifier:16字节的十六进制数字组合,全局唯一,
  sql_variant:接济各样数据类型;
  还有xml、table等,此外还足以自定义数据类型。

2.1
函数

放到函数详细介绍参考:行集函数、聚合函数、排行函数、标量函数
或许数据库书籍。
函数新闻查询
   a. 工具栏“协理”- -> “动态资助”;
   b. 初步“文档教程”- -> “SQL server 教程”
系统函数 ~ 自定义函数
a. 系统函数
   允许用户在不直接访问系统表的场合下取得SQL系统表的音讯。
b. 自定义函数:User Defined Function
优点

  • 模块化设计;
  • 施行进度快,缓存布置降低编译开支、无需重新解析和优化;
  • 削减互联网流量;

分类

  • 标量型函数:Scalar Function,只可以回去标量值;
  • 内联表值型函数:Inline table-valued Function,参数化的视图,只好回到
    TABLE 类型;
  • 多评释表值型函数:Multi-Statement Table-Valued
    Function,标量型函数和内联表值型函数的结缘;

创建

  create function 函数名(@参数名 参数类型, [..])
      returns 返回值类型
   as
   begin
      SQL语句;
      return 返回的对象;
   end

注:begin…end 块中的语句无法有任何副作用。
查询
函数的概念、架构等。
修改/删除
alter/drop function 函数名

2.2
关键字

  a. set ~ select
 
select帮衬在3个操作内同时为八个变量赋值,不过为变量赋值和数据检索无法而且展开,参考
双方的区分;
  b. cast() ~ convert()
类型转换函数
  · cast(源值 as 目标项目);
  · convert(目标数据类型,源数据[,
格式化代号]),可以格式化日期和数值;
  c. delete ~ drop ~
truncate

  ·
delete:DML,删除数据表中的行(一行或全数行)/记录,自动隐式commit,不能回滚;
        delete from 表名 where 条件
  ·
drop:DDL,显式手动commit,可以回滚,删除数据库、数据表或删除数据表的字段;
        drop table 表名
  ·
Truncate:快速、无日志记录,删除数据表中的数额、不删除表,不可復苏;
        truncate table 表名
  从删除速度来说,drop> truncate > delete,其他不同详细参考
delete ~ drop ~
Truncate。
  d. insert
 
注意区分上边3个insert语句的区分,第3种Product格式,values中务必交给相应的值,其中国和东瀛期系统默认1904-01-01;第叁种格式,values中采纳default约束。

   insert into Product(productName,productPrice,productStorage,productDate,productClass) 
                 values('电冰箱', null, 0, '', 1)
   insert into Product(productName,productClass) values('电冰箱',1)

  批量安顿数据
  [1]. insert into
目标表表名或列视图 select 检索语句
from 源表名
  [2]. select 列列表 into 目的表表名 from 源表表名     
  e. waitfor
   定时、延时或堵住实施批处理、存储进度或业务。  

3.
数额库表设计难点

  常用表操作格式 
  [a]. 创建数据库与表 
   create database/table 数据库名/表名 
  [b]. 查看表信息 
   exec sp_help 表名   
  [c]. 添加新列、修改列名与类型 
   alter table 表名 
    add 列名 列类型 
   exec sp_rename ‘表名.列名’, ‘新列名’ (注意必须加引号) 
   alter table 表名 
    alter column 列名 新的列数据类型     

  a. E-R模型图
 实体-联系(Entities-Relationships)模型,描述概念数据模型的不二法门之一,软件生命周期的设计阶段,提供实体、属性、联系的面向用户的表达方法,实体之间存在一定、一对多、多对多的关系。
  b. 关系规范化
数据库完整性
  三大范式:
  · 第贰范式 1NF:全部属性(值)是不可分割的原子值;
  · 第②范式 2NF:全数属性数据必须依靠主键;
  · 第贰范式 3NF:数据库表中无法包蕴已在任何表中包涵的非主键音讯;
 关系型数据库三大完整性:
  · 实体完整性:主键约束
primary key,唯一且非空;
  · 参照完整性:引用完整性,外键约束
foreign key 等关联约束;
  · 用户自定义完整性:域完整性,字段类型等;
  c. 分区表
 依据数据水平格局分区,将数据分布于数据库的三个例外的文件组中:
  - 改革大型表以及独具各样访问形式的表的可伸缩性和可管理性;
  - 对于多CPU系统,帮忙相互方式对表操作;
 分区函数~分区方案:

  create partition function 函数名(分区条件) 
   as range left/right for values() 
  create partition scheme 方案名 
   as partition 函数名

 三个分区方案不得不用叁个分区函数,3个分区函数可以被多少个分区方案共用。
  d. 文件组 
 在数据库中对文本举办分组的一种管理机制,叁个文书不能够是七个公文组的积极分子。文件组只好分包数据文件,事务日志文件无法是文件组的一有的。使用文件组可以凝集用户对文件的借助,通过文件组间接管理文件,可以使得一样文件组内的文本分布在差别的硬盘中,能增进IO质量。
 具体地可参考
文件和文件组。
  e. 标识符
 每一行数据必须都有一个唯一的可分其他品质作为标识符。
  · identity:本地(表内)唯一,使用形式identity(开始种子值,增量);
【997755.com澳门葡京】从入门到明白,学习笔记。     select @@identity:查看新插入行数据的标识符(的序号)
 
     select $identity from 表名:引用(展现)表的绝无仅有标识符列
 
  ·
uniqueidentifier:全局唯一,应用rowguidcol属性作为标识符指示新列为guid列,暗中认同定义使用newid或newsequentialid()函数生成全局唯一值;同理,使用$rowguid引用唯一标识符列。
     ID uniqueidentifier default newsequentialid() rowguidcol   

SQL语言

结构化查询语言,Structured Query
Language,SQL是一种数据库查询和顺序设计语言,用于存储数据以及询问、更新、管理关全面据库系统,高级的非进程化编程语言。Transact-SQL是微软对SQL的恢宏,具有SQL的首要特征,同时扩张了变量、运算符、函数、流程控制和注释等语言因素。
SQL语言分四类:数据定义语言[DDL]、数据查询语言[DQL]、数据操纵语言[DML]、数据控制语言[DCL]。

– [1].DDL(Data Defination
Language)
      style=”color: blue;”>创设和治本数据库中的对象,定义SQL情势以及数据库、表、视图和目录的成立和注销。不需COMMIT。
     创建CREAT,  修改ALTER,  删除DROP,  删除TRUNCATE
     TRUNCATE,  RENAME

– [2].DQL(Data Query
Language)
     基本结构: SELECT子句、FROM 子句、WHERE子句组成查询块。
     SELECT<字段名表>,  FROM<表或视图名>,  
WHERE<查询条件>

– [3].DML(Data Manipulation
Language)
      style=”color: blue;”>直接操作数据表中的数码,依照须求寻找、插入、删除数据以及创新数据库.
     操作的单位是记录。DML要求COMMIT显式提交。
     插入INSERT,   删除DELETE,  更新UPDATE

– [4].DCL(Data Control
Language)
     用于授予或撤除对用户对数据库对象的拜会权限,保险数据安全性。
     授权GRANT,  打消授权REVOKE,  显式限制权力集合DENY

事情控制语言TCL (Transaction Control Language)
提交COMMIT,回滚ROLLBACK,设置保存点SAVEPOINT
SQL>COMMIT:显式提交
SQL>ROLLBACK:回滚命令使数据库状态回到上次最终交给的情形
SQL>SET AUTOCOMMIT ON:自动提交
动用SQL命令直接落成:隐式提交。

1.
数据类型

 1. 字符数据类型
  a. 字符串:char、varchar、text;
  b.
Unicode字符串:nchar、nvarchar、ntext,用N标识,unicode是统一字符编码标准,
双字节对字符(英文,汉字)编码;
   使用Unicode数据类型,可以最大限度地清除字符转换的题材。
 2. 数字数据类型
  a. 整数型:tinyint(1)、smallint(2)、int(4)、bigint(8);
  b.
Decimal和numeric:固定精度和小数位数,decimal(p,s)或numeric(p,s),0≤s≤p;
  c. 货币类型:smallmoney(4)、money(8);
  d. 近似数字:float、real(4);
  e. bit类型:0/1序列;
 3. 日期和时间数据类型
  time、date、smalldatetime、datetime、datetime2、datetimeoffset;
 4. 二进制数据类型
  binary、varbinary;
 5. 其余数据类型
  uniqueidentifier:16字节的十六进制数字构成,全局唯一,
  sql_variant:辅助各样数据类型;
  还有xml、table等,其余还足以自定义数据类型。

2.1
函数

停放函数详细介绍参考:行集函数、聚合函数、排行函数、标量函数
可能数据库书籍。
函数消息查询
   a. 工具栏“接济”- -> “动态帮衬”;
   b. 开头“文档教程”- -> “SQL server 教程”
系统函数 ~ 自定义函数
a. 系统函数
   允许用户在不直接访问系统表的情形下拿到SQL系统表的音讯。
b. 自定义函数:User Defined Function
优点

  • 模块化设计;
  • 实践进程快,缓存布署降低编译费用、无需再一次解析和优化;
  • 压缩网络流量;

分类

  • 标量型函数:Scalar Function,只好回到标量值;
  • 内联表值型函数:Inline table-valued Function,参数化的视图,只可以回去
    TABLE 类型;
  • 多注脚表值型函数:Multi-Statement Table-Valued
    Function,标量型函数和内联表值型函数的组合;

创建

  create function 函数名(@参数名 参数类型, [..])
      returns 返回值类型
   as
   begin
      SQL语句;
      return 返回的对象;
   end

注:begin…end 块中的语句不可以有其余副功用。
查询
函数的概念、架构等。
修改/删除
alter/drop function 函数名

2.2
关键字

  a. set ~ select
 
select扶助在1个操作内同时为多少个变量赋值,不过为变量赋值和数据检索无法而且举行,参考
两岸的分别;
  b. cast() ~ convert()
类型转换函数
  · cast(源值 as 目的项目);
  · convert(目标数据类型,源数据[,
格式化代号]),可以格式化日期和数值;
  c. delete ~ drop ~
truncate

  ·
delete:DML,删除数据表中的行(一行或全体行)/记录,自动隐式commit,不可能回滚;
        delete from 表名 where 条件
  ·
drop:DDL,显式手动commit,可以回滚,删除数据库、数据表或删除数据表的字段;
        drop table 表名
  ·
Truncate:飞快、无日志记录,删除数据表中的数额、不删除表,不可復苏;
        truncate table 表名
  从删除速度来说,drop> truncate > delete,其余不一样详细参考
delete ~ drop ~
Truncate。
  d. insert
 
注意区分上边三个insert语句的区分,第1种Product格式,values中必须提交相应的值,其中国和东瀛期系统暗许一九零五-01-01;第叁种格式,values中采纳default约束。

   insert into Product(productName,productPrice,productStorage,productDate,productClass) 
                 values('电冰箱', null, 0, '', 1)
   insert into Product(productName,productClass) values('电冰箱',1)

  批量布置数据
  [1]. insert into
目的表表名或列视图 select 检索语句
from 源表名
  [2]. select 列列表 into 目标表表名 from 源表表名     
  e. waitfor
   定时、延时或堵住实施批处理、存储进程或作业。  

3.
数量库表设计难点

  常用表操作格式 
  [a]. 创建数据库与表 
   create database/table 数据库名/表名 
  [b]. 查看表信息 
   exec sp_help 表名   
  [c]. 添加新列、修改列名与类型 
   alter table 表名 
    add 列名 列类型 
   exec sp_rename ‘表名.列名’, ‘新列名’ (注意必须加引号) 
   alter table 表名 
    alter column 列名 新的列数据类型     

  a. E-R模型图
 实体-联系(Entities-Relationships)模型,描述概念数据模型的措施之一,软件生命周期的设计阶段,提供实体、属性、联系的面向用户的表达方法,实体之间存在一定、一对多、多对多的关联。
  b. 事关规范化
数据库完整性
  三大范式:
  · 第叁范式 1NF:全数属性(值)是不可分割的原子值;
  · 第1范式 2NF:全部属性数据必须依靠主键;
  · 第贰范式 3NF:数据库表中不可以包蕴已在其它表中包括的非主键消息;
 关系型数据库三大完整性:
  · 实体完整性:主键约束
primary key,唯一且非空;
  · 参照完整性:引用完整性,外键约束
foreign key 等关乎约束;
  · 用户自定义完整性:域完整性,字段类型等;
  c. 分区表
 根据数据水平形式分区,将数据分布于数据库的四个不等的文件组中:
  - 改进大型表以及全部各类访问格局的表的可伸缩性和可管理性;
  - 对于多CPU系统,接济相互方式对表操作;
 分区函数~分区方案:

  create partition function 函数名(分区条件) 
   as range left/right for values() 
  create partition scheme 方案名 
   as partition 函数名

 多个分区方案不得不用1个分区函数,1个分区函数可以被几个分区方案共用。
  d. 文件组 
 在数据库中对文件举办分组的一种管理机制,三个文书无法是多少个文本组的积极分子。文件组只可以分包数据文件,事务日志文件不可以是文本组的一有的。使用文件组可以凝集用户对文本的借助,通过文件组直接管理文件,可以使得同一文件组内的公文分布在不相同的硬盘中,能进步IO质量。
 具体地可参考
文本和文件组。
  e. 标识符
 每一行数据必须都有多个唯一的可分其他性质作为标识符。
  · identity:本地(表内)唯一,使用方式identity(起始种子值,增量);
     select @@identity:查看新插入行数据的标识符(的序号)
 
     select $identity from 表名:引用(显示)表的绝无仅有标识符列
 
  ·
uniqueidentifier:全局唯一,应用rowguidcol属性作为标识符指示新列为guid列,默许定义使用newid或newsequentialid()函数生成全局唯一值;同理,使用$rowguid引用唯一标识符列。
     ID uniqueidentifier default newsequentialid() rowguidcol   

1.2.1 数据库三级方式结构

  1. 模式
    格局也称逻辑格局或概念情势,它是数据库中全体数据的逻辑结构和特征的描述,是具有用户的公共数据视图。一个数据库唯有二个情势,情势处于三级社团的中间层。
    定义模式时不仅要定义数据的逻辑结构,而且要定义数据之间的联系,定义与数据有关的安全性完整性要求
  2. 外模式
    外格局也称用户情势,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述是数据库用户的数据视图是与某一应用有关的数据的逻辑表示。外格局是格局的子集。三个数据库可以有五个外格局。
    外模式是保证数据安全性的一个有力措施。
  3. 内模式
    内方式也称存储形式,一个数据库只有1个内形式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式

    ### 1.2.2 三级方式里面的投射

    为了可以在其中贯彻数据库的三个抽象层次的联系和更换,数据库管理种类在三级格局里面提供了两层映射。

  4. 外情势/格局映射
    对应于同四个形式可以有自由多个外形式。对于每3个外方式,数据库系统都有一个外形式/形式映射。当方式改变时,由数据库管理员对各样外格局/形式映射作相应的改变,能够使外形式保持不变。依照数据外方式编写的应用程序就毫无修改,保证数据与程序的逻辑独立性

  5. 997755.com澳门葡京 ,格局/内格局映射
    形式/内方式映射唯一,定义了数据库的大局逻辑结构与存储结构之间对应涉及。当数据库的仓储结构改变时,由数据库管理员对格局/内方式映射作相应改变,可以使方式保持不变,应用程序相应地也不做变更。保证数据与程序的物理独立性

    1.3 数据模型

    数据模型是一种对客观事物抽象化的表现格局。它对客观事物加以抽象,通过电脑来处理具体世界中的具体事物。它客观地反映了实际世界,易于明白,与芸芸众生对外表东西描述的认识相平等。

    ### 1.3.1 数据模型的概念

    数据模型由数据结构、数据操作、完整性约束组成。
    数据结构:是对系统静态特征的叙述。描述对象包涵数据的门类、内容、行政和多少里面的相互关系。
    数据操作:是对系统动态特征的叙说,是对数据库中种种对象实例的操作。
    完整性约束:是完整性规则的汇聚。他定义了给定数据模型中多少及其关联所独具的制约和现有规则。

    ### 1.3.2 常见的数据模型

  6. 层次模型:用树形结构意味着实体类型及实体间关系的数据模型成为层次模型。

  • 每棵树有且仅有3个无大人节点,称为根。
  • 树中除根外全数节点有且仅有三个家长。
  1. 网状模型:用有向图结构意味着实体类型及实体间关系的数据模型成为网状模型。用网状模型编写应用程序及其复杂,数据的独立性较差。
  2. 关系模型:以二维表来叙述数据。在事关模型中,各种表有多个字段列和记录行,各种字段列有固定的习性(数字、字符、日期等)。关系模型数据结构不难、清晰、具有很高的数额独立性,由此是眼前主流的数据库数据模型。
  • 关系:二维表
  • 元组:二维表一行,表中的记录
  • 属性:二维表一列,用项目和值表示
  • :各个属性取值的转变范围,如性其余域为{男,女}

提到模型中的数据约束:

  • 实体完整性约束:约束关系的主键属性值无法为空
  • 参照完整性约束:关系里面的宗旨约束
  • 用户定义的完整性约束:反应具体选取中数据的语义必要

    ### 1.3.3 关周密据库的规范化

    率先范式(1NF)、2NF、3NF、鲍依斯-科得范式(BCNF)、4NF、5NF。其中,NF是Normal
    Form的缩写。一般景况下,只要把多少正式到第叁范式标准即可满意急需。

  • 1NF:在一个提到中,消除重复字段,且各字段都以微小的逻辑存储单位。

  • 2NF:1NF基础上,消去非主属性对键的一部分函数依赖
  • 3NF:2NF基础上,消去非主属性对键的传递函数依赖
  • BCNF:3NF基础上,消去主属性对键的传递函数依赖
  • 4NF:BCNF基础上,消去表中的多值依赖
    详尽表达

    ### 1.3.4 关周到据库的安顿标准

  1. 数据库内文件的数据社团应拿到最大限度的共享、最小的冗余度,化解数据及数据倚重关系中的冗余部分,使依赖于同一个数据模型的数量达到有效的分别。
  2. 管教输入、修改数据时数据的一致性与不易。
  3. 有限帮衬数据与运用数据的应用程序之间赢得惊人独立性。

    ### 1.3.5 实体与涉及

    实体是指客观存在并可相互区分的东西,也得以是空泛的定义或涉及。实体之间有三种关系。

  4. 一对一关乎:表A中的一条记下确实在表B中有且唯有一条相匹配的记录。在一对一事关中,超过二分之一唇齿相依新闻都在三个表中。
    学生与学生的身份证号

  5. 一对多关系:表A中的行能够在表B中有比比皆是匹配行,然则表B中的行只可以在表A中有三个匹配行。
    一个学生只属于一个班,一个班有多名学生
  6. 多对多涉及:关系中的各种表的行在相关表中颇具多少个匹配行。在数据库中,多对多涉及的创设是依赖第二个表(称作连接表)落成的,连接表包罗相关的多少个表的主键列,然后从八个相关表的主键列分别创造与连接表中的匹配列的涉及。
    一个学生可以选择多门课,一门课也有多名学生

详见说明

1.2.1 数据库三级方式社团

  1. 模式
    情势也称逻辑格局或概念方式,它是数据库中全体数据的逻辑结构和特征的描述,是颇具用户的公共数据视图。八个数据库唯有二个形式,方式处于三级协会的中间层。
    定义模式时不仅要定义数据的逻辑结构,而且要定义数据之间的联系,定义与数据有关的安全性完整性要求
  2. 外模式
    外格局也称用户方式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述是数据库用户的数据视图是与某一应用有关的数据的逻辑表示。外格局是形式的子集。二个数据库可以有多少个外情势。
    外模式是保证数据安全性的一个有力措施。
  3. 内模式
    内格局也称存储形式,二个数据库唯有两个内格局。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式

    ### 1.2.2 三级情势之间的照射

    为了可以在内部贯彻数据库的三个抽象层次的联系和转换,数据库管理体系在三级方式里面提供了两层映射。

  4. 外格局/情势映射
    对应于同多个情势可以有自由多少个外情势。对于每三个外格局,数据库系统都有三个外格局/方式映射。当格局改变时,由数据库管理员对各样外格局/形式映射作相应的更动,可以使外方式保持不变。依据数据外形式编写的应用程序就不要修改,保证数据与程序的逻辑独立性

  5. 方式/内形式映射
    格局/内格局映射唯一,定义了数据库的全局逻辑结构与存储结构之间对应提到。当数据库的积存结构改变时,由数据库管理员对格局/内格局映射作相应变更,可以使情势保持不变,应用程序相应地也不做变更。保证数据与程序的物理独立性

    1.3 数据模型

    数据模型是一种对客观事物抽象化的表现格局。它对客观事物加以抽象,通过电脑来拍卖具体世界中的具体事物。它合理地反映了现实世界,易于领会,与人们对外表东西描述的认识相平等。

    ### 1.3.1 数据模型的概念

    数据模型由数据结构、数据操作、完整性约束组成。
    数据结构:是对系统静态特征的叙述。描述对象包蕴数据的品种、内容、行政和多少里面的互相关系。
    数据操作:是对系统动态特征的叙说,是对数据库中各类对象实例的操作。
    完整性约束:是完整性规则的集结。他定义了给定数据模型中数量及其关联所持有的制约和现有规则。

    ### 1.3.2 常见的数据模型

  6. 层次模型:用树形结构意味着实体类型及实体间关系的数据模型成为层次模型。

  • 每棵树有且仅有三个无大人节点,称为根。
  • 树中除根外全体节点有且仅有二个双亲。
  1. 网状模型:用有向图结构意味着实体类型及实体间关系的数据模型成为网状模型。用网状模型编写应用程序及其复杂,数据的独立性较差。
  2. 关系模型:以二维表来描述数据。在论及模型中,每种表有八个字段列和记录行,各个字段列有固定的习性(数字、字符、日期等)。关系模型数据结构不难、清晰、具有很高的数据独立性,因而是现阶段主流的数据库数据模型。
  • 关系:二维表
  • 元组:二维表一行,表中的笔录
  • 属性:二维表一列,用项目和值表示
  • :各个属性取值的成形范围,如性其余域为{男,女}

波及模型中的数据约束:

  • 实体完整性约束:约束关系的主键属性值不可以为空
  • 参照完整性约束:关系里面的主导约束
  • 用户定义的完整性约束:反应具体接纳中多少的语义须求

    ### 1.3.3 关周密据库的规范化

    先是范式(1NF)、2NF、3NF、鲍依斯-科得范式(BCNF)、4NF、5NF。其中,NF是Normal
    Form的缩写。一般情状下,只要把数量正式到第叁范式标准即可满足急需。

  • 1NF:在1个关系中,消除重复字段,且各字段都是微乎其微的逻辑存储单位。

  • 2NF:1NF基础上,消去非主属性对键的片段函数着重
  • 3NF:2NF基础上,消去非主属性对键的传递函数依赖
  • BCNF:3NF基础上,消去主属性对键的传递函数倚重
  • 4NF:BCNF基础上,消去表中的多值正视
    详尽表达

    ### 1.3.4 关周全据库的设计规范

  1. 数据库内文件的数据社团应取得最大限度的共享、最小的冗余度,消除数据及数据依赖关系中的冗余部分,使倚重于同一个数据模型的数额达到有效的分手。
  2. 保障输入、修改数据时数据的一致性与科学。
  3. 有限支撑数据与使用数据的应用程序之间取得可观独立性。

    ### 1.3.5 实体与关系

    实业是指客观存在并可交互区分的事物,也足以是空虚的概念或提到。实体之间有三种关系。

  4. 一对一关联:表A中的一条记下确实在表B中有且唯有一条相匹配的记录。在一对一关乎中,当先3/6生死相依消息都在三个表中。
    学生与学生的身份证号

  5. 一对多关系:表A中的行可以在表B中有多如牛毛匹配行,不过表B中的行只辛亏表A中有多个匹配行。
    一个学生只属于一个班,一个班有多名学生
  6. 多对多关系:关系中的每一种表的行在相关表中装有三个匹配行。在数据库中,多对多关系的创立是依赖第四个表(称作连接表)完成的,连接表蕴含相关的多少个表的主键列,然后从多少个相关表的主键列分别创立与连接表中的匹配列的关联。
    一个学生可以选择多门课,一门课也有多名学生

详尽表明

 f. 主键 PK ~ 外键 FK 

 主键:保险全局唯一性;
 外键:建立和抓实四个表数据里面链接的一列或多列,强制引用完整性,可以有效预防误删;
  主键约束 ~ 外键约束 ~
唯一约束
  – 主键约束
  主键约束用于落到实处实体完整性,各种表的主键有且不得不有一个,主键列不或者蕴涵null值。讲明联合主键接纳第③ 、3种形式。创造PK约束,具体参见大话数据库或
二种方式创造主键约束;
  系统暗中同意生成的主键约束名为:PK_表名_队列串号
  – 外键约束
  外键约束用于落实参照完整性,一个表A:foreign key指向另二个表B:primary
key,表B是主表,表A是从表。外键约束创建两种艺术,参见大话数据库可能
二种办法创立外键约束;
  系统暗中认同生成的外键约束名为:FK_表名_字段名_队列串号
 示例主/外键的两种创立方法:
  1.
创制table时,间接在字段前面声明为 primary key 或然 foreign key

1  create table orders(
2         orderID varchar(10) not null primary key,
3         orderProduct varchar(30) not null,
4         personID varchar(20) foreign key references persons(personID)
5   );

  2.
成立table时,全体字段注解之后,添加主键和外键的约束语句

1  create table orders(
2         orderID varchar(10) not null,
3         orderProduct varchar(30) not null,
4         personID varchar(20) not null,
5         constraint PK_orders primary key(orderID),
6         constraint FK_orders_personID foreign key(personID) references persons(personID)
7  );

  3.
在table已创立后,为表添加主外键约束

1  alter table orders
2         add constraint PK_orders primary key(orderID),
3              constraint FK_orders_personID foreign key(personID) references persons(personID) 

  – not null 约束
  强制列不收受null值,具体应用参考上述代码。
  – default 约束
  用于向列中插入默许值,default只好用来insert语句且不能与identity同时用,具体应用参考如下示例代码:
  1.
成立table时,直接在字段前边表明为 default

1  create table Certifications(
2      certID int not null primary key identity(1001,1),
3      certName varchar(20) not null,
4      certPassword varchar(20) default('12345678'),
5      certTime varchar(30) default(getdate())
6  );

  2.
注意,default约束不存在此种方法;
  3.
在table已开立后,为表添加专擅认同约束

1  alter table Certifications
2      add constraint DF_Certifications_certPassword default '123456' for certPassword,
3           constraint DF_Certifications_certTime default getdate() for certTime

  – check 约束
 
用于限制列中的数据的范围,为三个列定义check约束拔取第① 、3种办法,具体方法如下:
  1. 创办table时,直接在字段后边添加:check(条件表明式)
  2. 成立table时,全体字段申明之后添加:constraint CHK_表名_字段名 check(条件表明式)
  3. 在table已创制后,为表添加check约束

1   alter table 表名
2       add constraint CHK_表名_字段名 check(条件表达式)

  – unique 唯一约束
 用于唯一标识表中的每条记下,通过唯一性性索引强制实体完整性,unique算是对primary
key的互补,可是种种表可有多个unique约束且允许null值,创设unique约束的3种办法可参照上述办法:

1  [1].unique
2  [2].constraint UNQ_表名_字段名 unique(字段名)
3  [3].alter table 表名
4        add constraint UNQ_表名_字段名 unique(字段名)

  总结
  · 获取table的封锁新闻:exec
sp_helpconstraint 表名
  · 打消上述各类束缚:alter
table 表名 drop constraint
主/外键约束名 
  · 关闭/开启约束检测:nocheck/check constraint 约束名/all
  · 若表中已存在多少,在丰硕封锁从前先拔取with nocheck可以禁止对已有数据的检测。
  · 级联更新/删除:on
update/delete cascade

4.
或多或少高级搜索技术

where
… union … group by … having … order by … (limit) … 

  a. 分组技术
  SQL Server
之三种分组技术介绍
  · group by
  在select中作为分组条件的列名一定假如在group by子句中动用的列列表中。

       select 作为分组条件的列名
聚合总计函数(被总括字段列) from
表名 group by 用于分组的列列表(A,B,C) 

  优先级:C > B > A
  · having
  having 与 where 语句看似,where 是在分拣以前过滤,having
是在分拣之后过滤,且having条件中不时包蕴聚合函数。
   group by … having … order by …  
  · rollup ~ cube
  rollup呈现所选列的值得某一层次结构的集结,cube呈现所选列的值得拥有结成的联谊,且进一步细化;两者均必要和group
by一起用。
  具体差别详解见:rollup ~
cube,rollup
~ cube –
2
  b. 一路查询
  · union
  并集,用于整合1个以上的结果集,专断认同去重,union
all不去重。不过有列类型和列数量是不是相应一致的限量。 
  c. 连接查询
 
 连接是关系型数据库模型的重点特征,通过一而再运算符来完结八个表的联表查询,灵活,语句格式:

   select 表名.列名[列列表...]
      from table_A 连接运算符 table_B [on 联表查询的匹配条件]

  注意,在连接表查询中学会使用别名。以下可参考
接连查询简例,延续关系示意图。
  · 内连接
  inner join,也即一般连接,包蕴等值连接、自然连接、不等连接。重返的查询结果集合仅仅是select的列列表以及适合查询条件和连接条件的行。其中,自然连接会去掉重复的属性列。  
  · 外连接
  outer
join,包涵左外连接、右外连接和完全连接。再次回到的询问结果集合不仅含有select的列列表以及适合查询条件和连接条件的行,还包罗左表(左连接)、右表(右连接)或多个连接表(完全连接)中的全体数据行。

      A left join B == B right join A;   
  · 交叉连接
  cross join,连接表中全体数据的笛Carl积,结果集的数额行数 =
第③个表中符合查询条件的多少行数 *
第四个表中符合查询条件的数目行数。cross
join后加条件只好用where,不只怕用on。  
  · 自连接
  连接首要字的两边都以同3个表,将本身表的多少个镜像当作另3个表来对待。自连接可以将急需四次询问的言辞综合成一条语句2回进行成功。参考示例:自连接查询,也可参见大话数据库中有关自连接的事例。
  d. 子查询
 即内部查询(inner
query),子查询就是坐落select、update或delete语句中内部的询问。子查询在主查询执行在此以前实施3遍,主查询使用子查询的结果。参考示例:子查询,各类查询总计. 

  select select_list from table1
      where expression operator(select select_list from table2);

  · 单行子查询
  重返零行或一行。单行相比较运算符:= ,>, >= ,< , <=
,<>。
  · 多行子查询 
  重返一行或多行。多行相比运算符:IN/NOT IN,ANY/ALL,EXISTS。
  ANY:匹配子查询得到的结果集中的随机一条数据;
  ALL:匹配子查询得到的结果集中的满贯数额;
  EXISTS:重临bool值,只检查行的存在性,而IN检查实际值的存在性(一般景况EXISTS质量高于IN)。
  f. 索引
  此处将引得拿出来作为独立的一章进行总括学习,如下。

5.
索引

目录是对数据库表中一列或多列的值举行排序的一种结构,飞快有效查找与键值关联的行,加快对表中记录的物色过滤或排序。索引拔取 B树 结构。
优点:
 (1)连忙搜索读取数据;
 (2)有限支撑数据记录的唯一性;
 (3)实现表与表之间的参考完整性,加快表和表之间的连日;
 (4)在运用order by、group
by子句举办数据检索时,利用索引可以减去排序分组时间;
 (5)通过应用索引,可以在查询的进度中,使用优化隐藏器,升高系统的习性;
  缺点:
 (1)增添了数据库的积存空间;
 (2)创设索引和保安索引要消耗时间;
 (3)插入和修改数据时要开销较多时间更新索引;
 (4)修改品质和查找质量是并行争论的;
分类:依照目录的相继与数据表的物理顺序是还是不是相同
 · 聚集索引
 
索引的依次与数据表的物理顺序相同,进步多行追寻速度。2个表只好包括3个聚集索引。聚集索引的叶级是数据页,数据值的相继总是依据升序排列。在开创任何非聚集索引此前先创制聚集索引。聚集索引的平均大小约为数据表的5%。
 · 非聚集索引
 
索引的一一与数据表的物理顺序差距,单行检索快。二个表最多2五十个非聚集索引。非聚集索引的叶级是索引页。索引页中的行标识符(或聚集键)指向数据页中的记录(或表的聚集索引,再经过聚集索引检索数据),行标识符由文件ID、页号和行ID组成,并且是绝无仅有的。数据堆通过运用索引分配图(IAM)页来珍爱。
特征:
 · 唯一性索引
 保障索引列中的全体数码是唯一的。只可以在可以确保实体完整性的列上成立唯一性索引。
 · 复合索引
 
二个目录创造在3个或多少个列上。不或然跨表建立复合列。注意列的排列顺序。复合索引可以拉长查询质量,裁减在3个表中所创造的目录数量。复合索引键中最多可以结合16列。
创制索引:
 · 直接创立:索引创造向导或create index
 基本办法,灵活易增加、优化索引。语法:

 create [unique][clustered|nonclustered] index 索引名  
   on {表|视图}(列 [asc|desc][,...n])

 · 直接创制:利用约束直接创立
 主键约束 – ->
唯一性聚集索引,唯一性约束 – ->唯一性非聚集索引。
 利用约束创造索引的先期级高于create
index语句创立的目录。
保险索引:
 · 查看索引
  [1]. exec sp_helpindex 表名
  [2]. select * from sysindexes [where name = “索引名”]
 · 修改索引
  [1]. 修改索引名:exec sp_rename ‘表名.索引名’, ‘新索引名’
  [2]. 重新生成索引:alter
index 索引名/all on 表名
           rebuild;
     重新生成索引会先删除再重建索引。能够不用rebuild,直接用set设置索引选项。
 · 删除索引
   drop index 索引名 on 表名
   最万幸剔除以前,利用exists判断索引名的存在性;
 · 总结新闻
 总括新闻是储存在Sql Server中列数据的样本,Sql
Server维护某一索引关键值的遍布统计新闻。
  [1]. exec sp_updatestats
  [2]. update statistics 表名
[索引名]
 ·dbcc
showcontig
:突显表的数额和目录的碎片消息。
 ·dbcc dbreindex(表名,
索引名):重建表的三个或三个目录。
 ·showplan_all 和 statistics
io
:分析索引,查询品质,更好的调动查询和目录。
   set showplan_all on/off
   set statistics io on/off 
参考:
[1].
数据库索引的贯彻原理,目录先易后难
[2].
表和目录数据结构种类布局,SQL索引学习-索引结构

6.
视图

视图是一种逻辑对象,是由基本表导出的虚拟表,不占用其余数据空间、不存储数据,仅封装预约义的询问语句,其内容由询问定义。视图是翻开数据库表数据的一种办法,提供了仓储预约义的查询语句作为数据库中的对象以备后用的效应,但视图无法引得。被询问的表称为基表,对视图的数额操作(增、删、改),系统基于视图的定义去操作与视图相关联的基本表。
优点:
 (1)保险数据的逻辑独立性,数据保密;
 (2)隐藏复杂的SQL,SQL语句复用,数据简化操作逻辑,易于检索数据;
 (3)重新格式化检索出来的数码;
创立视图: 
  create
view 视图名 [with
schemabinding/encryption]
as 查询语句  
 (1)对于视图和基表必须紧凑结合的情景,利用with
schemabinding将视图定义为索引视图;
 (2)对创制视图的SQL语句加密,利用with encryption;
护卫视图:
 · 查看视图
  [1]. exec sp_helptext 视图名
  [2]. select definition
from sys.sql_modules
      where object_id=object_id(‘视图名’)
 · 修改视图
    alter view 视图名 as 查询语句  
   重命名视图: exec sp_rename 旧视图名, 新视图名
 
 · 删除视图
    drop view 视图名1 [,
视图名2, …]   

7.
游标

游标是一种只和一组数据中某二个笔录进行交互的法门,是对(select)结果集的一种扩张。将面向集合的数据库管理体系和面向行的次第设计组合,主要用以交互式应用。
Transact-SQL 游标
仓储进度、触发器和
T-SQL脚本,服务器端(后台)游标,仅接济单行数据提取,分为;

  • 静态游标:快照游标,在 tempdb 中开创游标;须要目前表保存结果集;
  • 动态游标:打开速度快、不需转变目前内部工作表,但一而再速度慢,不支持绝对提取;
  • 只进游标:私自认同值,顺序提取、不帮衬滚动,最节省能源;
  • 键集驱动游标:键集唯一标识行,键集是开拓游标时在 tempdb
    中变化并内置在表 keyset 中;必要暂且表保存键集;

注:客户端(前台)游标,仅帮忙静态游标,默许在客户机上缓存整个结果集、需保险游标地方新闻。服务器(后台)游标质量更佳、更精确的稳定更新,允许四个依照游标的移位语句。
利用游标的典型进程,分为:

  • 申明游标:declare 游标名称 + SQL检索语句

    declare 游标名称 cursor

     [local|global] [forward_only|scroll] [static|dynamic] ..
    

    for SQL(select)检索语句

  • 打开游标: open [golbal] 游标名称 | 游标变量
     ,游标打开的同时招来数据并蕴藏。

  • 领取数额

    fetch [next|prior|first|last | absolute|relative]

        from [global] 游标名称 | 游标变量
        into 结果变量[..]
    

    定位修改和删除数据:前提是用  for
update of 列列表; 设置可编制的列。

  update 表名 set 列名=新值[..] where current of 游标名
  delete from 表名 where current of 游标名
  • 关门游标: close [golbal] 游标名称 | 游标变量  
  • 删去游标: deallocate [golbal] 游标名称 | 游标变量  

注:游标变量指点用了游标的变量。其余操作:

  select @@CURSOR_ROWS;    // 游标中的数据行数
  select @@FETCH_STATUS;   // fetch执行状态(-2,-1,0)  

8.
储存进度

储存进度(Stored
Procedure),数据库架构功用域内的关键目标,是储存在大型数据库系统中一段为了做到一定功效的可复用的代码块,是SQL语句和可选控制流语句的
预编译
集合,经过第①回编译后再一次调用不必再次编译。存储进程紧要用来再次来到数据。
.vs 函数

  • 函数不或许修改数据库表数据,存储进程可以;
  • 积存进程必须 execute
    执行,函数调用更灵活;

优点:简单、安全、高性能

  • 允许标准组件式编程,可移植性、可复用;
  • 简言之易用,预编译、执行进度快、功用高;
  • 改良安全体制、保险数据的平安;
  • 节省互连网流量、下跌网络负载;

分类

  • 系统存储进程:存储在 master 数据库中,以
    “sp_”为前缀,用于从系统表中获取新闻。
  • 用户自定义存储进程:T-SQL存储进度、CL途乐存储进程、一时半刻存储进度。不恐怕将CLSportage存储过程创制为临时存储进度。

创建

1  create proc|procedure 存储过程名
2        (@parameter 参数数据类型 [,...])
3  as
4  begin
5    < SQL语句代码块 
6    return >
7  end

返回值

  • 利用 return 重临三个值;
  • 行使 output 定义重返参数来回到五个值; 

维护
· 查看:
  [1]. exec sp_helptext 存储进度名;
  [2]. sys.sql_modules目录视图;
  [3]. object_definition元数据函数; 
· 加密:with encryption
· 修改:直接将 create 替换为
alter;
· 删除:drop proc 存储过程名;
执行

  • 语法分析阶段
  • 分析阶段
  • 编译阶段:分析存储进度、生成存储进程举行安插。执行计划存储在进度连忙缓存区(专门用来存储已经编译过的查询规划的缓冲区)。
    • 再一次编译:[1].sp_recompile;[2]. 执行时在 exec 语句中甄选
      with recompile;
  • 施行等级

9.
触发器

Trigger,触发器是新鲜的储存进程,由 事件
自动触发,不可以显式调用,紧要用于掩护和增加数据的(一致/引用)完整性约束和作业规则([1].
约束;[2]. 触发器)。触发器可以级联嵌套。常用的 inserted 和 deleted
表是对准当前触发器的某个表,在高速缓存中贮存新插入或删除的行数据的副本。可以领悟为委托事件。经常触发器只与单个表关联。 
封锁 vs 触发器 vs 存储进程
封锁首要被用来强制数据的完整性,能提供比触发器更好的属性;触发器常用于注解工作规则或是复杂的数码印证。触发器可以兑现约束的总体成效,但先行通过自律达成。

  • 错误音讯管理:约束只好利用标准的系统错误音讯,触发器可以自定义错误消息;
  • 性格差异;
  • 管理维护的工作量; 

参考:自律与数据库对象规则、暗中认同值+数据库设计中约束、触发器和仓储进度;
事件 –
-> 触发器 – -> 存储进度
·  DML
触发器:响应数据操作语言事件,将触发器和接触它的口舌作为可在触发器内回滚的单个事务;常用、质量费用小,能够兑现相关表数据的级联更改、评估数据修改前后表的情事。
ζ  AFTERAV4 触发器:在 IUD
操作、INSTEAD OF 触发器和约束处理未来被点燃;推荐且不得不在表上内定; 
ζ  INSTEAD OF
触发器:在封锁处理在此之前被激发(执行预处理补充约束操作),钦定执行DML触发器以取代日常的触发动作,优先级高于触发语句的操作;
注:逐个表或准备针对每一种 DML
触发操作 IUD,有且不得不有一个对应的 INSTEAD OF 触发器,可以有多少个照应的
AFTEGL450 触发器。
ζ  CL奥迪Q3触发器:执行在托管代码中的方法;
·  DDL 触发器:响应数据定义语言事件,用于在数据库中履行管理任务;
·  登录触发器:响应 logon 事件,用于审核和决定服务器会话;
优点

  • 预编译、已优化,执行效能高;
  • 已封装,安全、易维护;
  • 可重复使用;

缺点

  • 占用服务器能源多;
  • 后置触发(事后诸葛孔明);

创造与维护
·  DDL

  create/alter trigger 触发器名称
        on 作用域(DDL:数据库名database/服务器名all server)
        FOR create|alter|drop|grant 等DDL触发器
   as SQL处理语句

  删除: drop trigger 触发器名;  修改: create – -> alter  
·  DML

  create trigger 触发器名称
       on 作用域(DML:表名/视图名)
       [FOR|AFTER|INSTEAD OF] {[insert [,] update [,] delete]}
   as SQL处理语句

  嵌套:级联触发,递归触发
   ·  直接递归:更新T,触发Trig,Trig更新T,再次触发Trig;
   ·
直接递归:更新T1,触发Trig1,Trig1翻新T2,T2触发Trig2,Trig2更新T1;
  参考:如何决定触发器递归;

10.
事务 – 锁

 具体参考 作业和锁 –
sqh;

11.
全文索引

全文索引是一种格外类型的依照标记的功用性索引,用于抓好在大数据文本中摸索钦点关键字的快慢,由 全文索引引擎服务 (SQL Server
FullText Search)创设和维护。全文索引创设和维护的进度称为填充:完全填充、基于时间戳的增量式填充、基于更改追踪的填写。全文索引只可以在数据表上创办。
全文索引 .vs. 普通索引

  • 普通索引拔取B-Tree结构,全文索引基于标记生成倒排、堆积且压缩的目录;
  • 平时索引适于字符/字段/短文本查询,全文索引是基于关键字查询的目录,针对语言词语/长文本搜索;
  • 各样表允许有若干个普通索引,全文索引只可以有三个;
  • 一般而言索引自动更新、实时性强,全文索引必要定期维护;

全文目录 全文索引
积存全文索引,是创立全文索引的前提。全文目录是杜撰对象,是意味全文索引的逻辑概念。全文目录和全文索引都以为全文检索查询服务。

  • rebuild:重新生成全文目录;
  • reorganize:优化全文目录;

    create fulltext catalog 全文目录名
    create fulltext index on 全文索引基于的表名[索引包罗的列列表]

原理:两步走
对文本进行分词,并为每三个产出的单词记录三个目录项以保留出现过该单词的富有记录的音讯。全文索引引擎对进入到全文索引的列中的内容按字/词建立目录条目,即先定义二个词库,然后在小说中查找各个词条(term)出现的成效和岗位,把这一个频率地方音信按词库顺序归结,达成对文本建立1个以词库为目录的目录。
· 成立基于关键字查询的目录
     如何对文本进行分词:二元分词法、最大匹配法和总计形式
     建立目录的数据结构:采纳倒排索引的布局
· 在目录中摸索一定
   全文谓词:在
select 的 where/having 子句中内定
     contains:精确。简单词、派生词、加权词、前缀词、邻近词;
     freetext:模糊。文本拆分,分别搜索;
   行集函数:在 from
子句中指定
     containstable:
     freetexttable:

参考:全文索引原理介绍;全文索引原理及范例;

 f. 主键 PK ~ 外键 FK 

 主键:保险全局唯一性;
 外键:建立和增加五个表数据里面链接的一列或多列,强制引用完整性,可以有效预防误删;
  主键约束 ~ 外键约束 ~
唯一约束
  – 主键约束
  主键约束用于落到实处实体完整性,各个表的主键有且不得不有三个,主键列不可以包罗null值。表明联合主键采纳第③ 、3种格局。成立PK约束,具体参见大话数据库或
三种方式创制主键约束;
  系统默许生成的主键约束名为:PK_表名_队列串号
  – 外键约束
  外键约束用于落到实处参照完整性,三个表A:foreign key指向另二个表B:primary
key,表B是主表,表A是从表。外键约束创造三种艺术,参见大话数据库大概
三种办法创立外键约束;
  系统暗中同意生成的外键约束名为:FK_表名_字段名_队列串号
 示例主/外键的三种创造方法:
  1.
创制table时,直接在字段前边声明为 primary key 大概 foreign key

1  create table orders(
2         orderID varchar(10) not null primary key,
3         orderProduct varchar(30) not null,
4         personID varchar(20) foreign key references persons(personID)
5   );

  2.
创造table时,全体字段表明之后,添加主键和外键的封锁语句

1  create table orders(
2         orderID varchar(10) not null,
3         orderProduct varchar(30) not null,
4         personID varchar(20) not null,
5         constraint PK_orders primary key(orderID),
6         constraint FK_orders_personID foreign key(personID) references persons(personID)
7  );

  3.
在table已创设后,为表添加主外键约束

1  alter table orders
2         add constraint PK_orders primary key(orderID),
3              constraint FK_orders_personID foreign key(personID) references persons(personID) 

  – not null 约束
  强制列不收受null值,具体采取参考上述代码。
  – default 约束
  用于向列中插入暗中认可值,default只好用于insert语句且无法与identity同时用,具体接纳参考如下示例代码:
  1.
创立table时,间接在字段前面注脚为 default

1  create table Certifications(
2      certID int not null primary key identity(1001,1),
3      certName varchar(20) not null,
4      certPassword varchar(20) default('12345678'),
5      certTime varchar(30) default(getdate())
6  );

  2.
注意,default约束不设有此种方法;
  3.
在table已创建后,为表添加暗许约束

1  alter table Certifications
2      add constraint DF_Certifications_certPassword default '123456' for certPassword,
3           constraint DF_Certifications_certTime default getdate() for certTime

  – check 约束
 
用于限制列中的数据的界定,为多少个列定义check约束接纳第① 、3种办法,具体方法如下:
  1. 开立table时,直接在字段后边添加:check(条件表明式)
  2. 创办table时,全体字段声明之后添加:constraint CHK_表名_字段名 check(条件表明式)
  3. 在table已创设后,为表添加check约束

1   alter table 表名
2       add constraint CHK_表名_字段名 check(条件表达式)

  – unique 唯一约束
 用于唯一标识表中的每条记下,通过唯一性性索引强制实体完整性,unique算是对primary
key的互补,不过各样表可有八个unique约束且允许null值,创立unique约束的3种办法可参照上述措施:

1  [1].unique
2  [2].constraint UNQ_表名_字段名 unique(字段名)
3  [3].alter table 表名
4        add constraint UNQ_表名_字段名 unique(字段名)

  总结
  · 获取table的封锁新闻:exec
sp_helpconstraint 表名
  · 撤消上述各样束缚:alter
table 表名 drop constraint
主/外键约束名 
  · 关闭/开启约束检测:nocheck/check constraint 约束名/all
  · 若表中已存在多少,在丰富封锁以前先采取with nocheck可以禁止对已有数量的检测。
  · 级联更新/删除:on
update/delete cascade

4.
或多或少高级搜索技术

where
… union … group by … having … order by … (limit) … 

  a. 分组技术
  SQL Server
之三种分组技术介绍
  · group by
  在select中作为分组条件的列名一定假设在group by子句中运用的列列表中。

       select 作为分组条件的列名
聚合总结函数(被总计字段列) from
表名 group by 用于分组的列列表(A,B,C) 

  优先级:C > B > A
  · having
  having 与 where 语句看似,where 是在分拣之前过滤,having
是在分拣之后过滤,且having条件中平常包括聚合函数。
   group by … having … order by …  
  · rollup ~ cube
  rollup呈现所选列的值得某一层次结构的成团,cube突显所选列的值得全数组成的集合,且更为细化;两者均必要和group
by一起用。
  具体分化详解见:rollup ~
cube,rollup
~ cube –
2
  b. 一同查询
  · union
  并集,用于整合贰个以上的结果集,暗中认同去重,union
all不去重。可是有列类型和列数量是不是相应一致的限量。 
  c. 连日来查询
 
 连接是关系型数据库模型的第壹特色,通过连接运算符来已毕八个表的联表查询,灵活,语句格式:

   select 表名.列名[列列表...]
      from table_A 连接运算符 table_B [on 联表查询的匹配条件]

  注意,在连接表查询中学会使用别名。以下可参考
连日来查询简例,连续关系示意图。
  · 内连接
  inner join,也即经常连接,包蕴等值连接、自然连接、不等三番五次。再次回到的询问结果集合仅仅是select的列列表以及适合查询条件和屡次三番条件的行。其中,自然连接会去掉重复的属性列。  
  · 外连接
  outer
join,蕴涵左外连接、右外连接和完全连接。重返的查询结果集合不仅包涵select的列列表以及适合查询条件和连接条件的行,还包涵左表(左连接)、右表(右连接)或七个连接表(完全连接)中的全体数据行。

      A left join B == B right join A;   
  · 交叉连接
  cross join,连接表中存有数据的笛Carl积,结果集的数据行数 =
第③个表中符合查询条件的数量行数 *
首个表中符合查询条件的多少行数。cross
join后加条件只可以用where,不可能用on。  
  · 自连接
  连接首要字的两边都以同1个表,将本人表的3个镜像当作另五个表来对待。自连接可以将要求三次询问的话语综合成一条语句二回实施成功。参考示例:自连接查询,也可参见大话数据库中有关自连接的例子。
  d. 子查询
 即内部查询(inner
query),子查询就是放在select、update或delete语句中内部的询问。子查询在主查询执行以前实施3次,主查询使用子查询的结果。参考示例:子查询,各样查询总计. 

  select select_list from table1
      where expression operator(select select_list from table2);

  · 单行子查询
  再次来到零行或一行。单行比较运算符:= ,>, >= ,< , <=
,<>。
  · 多行子查询 
  重返一行或多行。多行相比运算符:IN/NOT IN,ANY/ALL,EXISTS。
  ANY:匹配子查询拿到的结果集中的任性一条数据;
  ALL:匹配子查询得到的结果集中的全部数目;
  EXISTS:再次回到bool值,只检查行的存在性,而IN检查实际值的存在性(一般境况EXISTS品质高于IN)。
  f. 索引
  此处将引得拿出来作为单身的一章举办统计学习,如下。

5.
索引

目录是对数据库表中一列或多列的值实行排序的一种结构,急迅有效查找与键值关联的行,加速对表中记录的摸索过滤或排序。索引采纳 B树 结构。
优点:
 (1)赶快搜索读取数据;
 (2)保险数据记录的唯一性;
 (3)完成表与表之间的参照完整性,加速表和表之间的总是;
 (4)在使用order by、group
by子句举办数据检索时,利用索引可以减弱排序分组时间;
 (5)通过行使索引,可以在查询的进程中,使用优化隐藏器,进步系统的习性;
  缺点:
 (1)增添了数据库的蕴藏空间;
 (2)创设索引和维护索引要成本时间;
 (3)插入和改动数据时要开销较多日子更新索引;
 (4)修改质量和摸索品质是并行顶牛的;
分拣:依照目录的依次与数据表的物理顺序是不是同样
 · 聚集索引
 
索引的种种与数据表的物理顺序相同,升高多行追寻速度。多个表只可以蕴含2个聚集索引。聚集索引的叶级是数据页,数据值的次第总是根据升序排列。在创设任何非聚集索引从前先创制聚集索引。聚集索引的平均大小约为数据表的5%。
 · 非聚集索引
 
索引的相继与数据表的大体顺序不一致,单行检索快。3个表最多2肆拾几个非聚集索引。非聚集索引的叶级是索引页。索引页中的行标识符(或聚集键)指向数据页中的记录(或表的聚集索引,再通过聚集索引检索数据),行标识符由文件ID、页号和行ID组成,并且是唯一的。数据堆通过接纳索引分配图(IAM)页来爱护。
特征:
 · 唯一性索引
 保障索引列中的全体数码是唯一的。只可以在可以确保实体完整性的列上制造唯一性索引。
 · 复合索引
 
2个索引创立在3个或四个列上。无法跨表建立复合列。注意列的排列顺序。复合索引可以增强查询品质,缩小在叁个表中所成立的目录数量。复合索引键中最多可以构成16列。
创制索引:
 · 直接开立:索引创造向导或create index
 基本方法,灵活易增加、优化索引。语法:

 create [unique][clustered|nonclustered] index 索引名  
   on {表|视图}(列 [asc|desc][,...n])

 · 直接创设:利用约束间接创制
 主键约束 – ->
唯一性聚集索引,唯一性约束 – ->唯一性非聚集索引。
 利用约束成立索引的优先级高于create
index语句创设的目录。
护卫索引:
 · 查看索引
  [1]. exec sp_helpindex 表名
  [2]. select * from sysindexes [where name = “索引名”]
 · 修改索引
  [1]. 修改索引名:exec sp_rename ‘表名.索引名’, ‘新索引名’
  [2]. 重新生成索引:alter
index 索引名/all on 表名
           rebuild;
     重新生成索引会先删除再重建索引。可以绝不rebuild,直接用set设置索引选项。
 · 删除索引
   drop index 索引名 on 表名
   最万幸剔除从前,利用exists判断索引名的存在性;
 · 总计音讯
 统计音信是储存在Sql Server中列数据的样本,Sql
Server维护某一索引关键值的遍布计算消息。
  [1]. exec sp_updatestats
  [2]. update statistics 表名
[索引名]
 ·dbcc
showcontig
:展现表的数额和目录的碎片音讯。
 ·dbcc dbreindex(表名,
索引名):重建表的3个或多少个目录。
 ·showplan_all 和 statistics
io
:分析索引,查询质量,更好的调动查询和目录。
   set showplan_all on/off
   set statistics io on/off 
参考:
[1].
数据库索引的贯彻原理,目录由浅入深
[2].
表和目录数据结构种类布局,SQL索引学习-索引结构

6.
视图

视图是一种逻辑对象,是由基本表导出的虚拟表,不占用其余数据空间、不存储数据,仅封装预约义的询问语句,其内容由询问定义。视图是翻开数据库表数据的一种办法,提供了仓储预订义的查询语句作为数据库中的对象以备后用的效应,但视图不只怕引得。被询问的表称为基表,对视图的数额操作(增、删、改),系统依照视图的定义去操作与视图相关联的基本表。
优点:
 (1)保险数据的逻辑独立性,数据保密;
 (2)隐藏复杂的SQL,SQL语句复用,数据简化操作逻辑,易于检索数据;
 (3)重新格式化检索出来的数额;
创建视图: 
  create
view 视图名 [with
schemabinding/encryption]
as 查询语句  
 (1)对于视图和基表必须紧密结合的场馆,利用with
schemabinding将视图定义为索引视图;
 (2)对创制视图的SQL语句加密,利用with encryption;
尊崇视图:
 · 查看视图
  [1]. exec sp_helptext 视图名
  [2]. select definition
from sys.sql_modules
      where object_id=object_id(‘视图名’)
 · 修改视图
    alter view 视图名 as 查询语句  
   重命名视图: exec sp_rename 旧视图名, 新视图名
 
 · 删除视图
    drop view 视图名1 [,
视图名2, …]   

7.
游标

游标是一种只和一组数据中某贰个笔录举行互动的章程,是对(select)结果集的一种扩展。将面向集合的数据库管理种类和面向行的次第设计结合,首要用以交互式应用。
Transact-SQL 游标
存储进程、触发器和
T-SQL脚本,服务器端(后台)游标,仅帮忙单行数据提取,分为;

  • 静态游标:快照游标,在 tempdb 中开创游标;必要权且表保存结果集;
  • 动态游标:打开速度快、不需变更暂且内部工作表,但延续速度慢,不帮忙相对提取;
  • 只进游标:默许值,顺序提取、不接济滚动,最节省财富;
  • 键集驱动游标:键集唯一标识行,键集是打开游标时在 tempdb
    中变化并内置在表 keyset 中;必要临时表保存键集;

注:客户端(前台)游标,仅援救静态游标,专擅认同在客户机上缓存整个结果集、需保险游标地点音信。服务器(后台)游标质量更佳、更准确的固定更新,允许多少个基于游标的活动语句。
拔取游标的典型进度,分为:

  • 宣示游标:declare 游标名称 + SQL检索语句

    declare 游标名称 cursor

     [local|global] [forward_only|scroll] [static|dynamic] ..
    

    for SQL(select)检索语句

  • 打开游标: open [golbal] 游标名称 | 游标变量
     ,游标打开的还要摸索数据并蕴藏。

  • 领到数据

    fetch [next|prior|first|last | absolute|relative]

        from [global] 游标名称 | 游标变量
        into 结果变量[..]
    

    定位修改和删除数据:前提是用  for
update of 列列表; 设置可编制的列。

  update 表名 set 列名=新值[..] where current of 游标名
  delete from 表名 where current of 游标名
  • 关闭游标: close [golbal] 游标名称 | 游标变量  
  • 删去游标: deallocate [golbal] 游标名称 | 游标变量  

注:游标变量率领用了游标的变量。其余操作:

  select @@CURSOR_ROWS;    // 游标中的数据行数
  select @@FETCH_STATUS;   // fetch执行状态(-2,-1,0)  

8.
仓储进程

仓储进程(Stored
Procedure),数据库架构功用域内的要紧目的,是储存在大型数据库系统中一段为了成功一定效用的可复用的代码块,是SQL语句和可选控制流语句的
预编译
集合,经过第2遍编译后再次调用不必再一次编译。存储进程首要用以再次回到数据。
.vs 函数

  • 函数不可以修改数据库表数据,存储进程可以;
  • 存储进度必须 execute
    执行,函数调用更灵活;

优点:简单、安全、高性能

  • 允许标准组件式编程,可移植性、可复用;
  • 简言之易用,预编译、执行进程快、功用高;
  • 立异安全部制、保障数据的安全;
  • 节约网络流量、下落网络负载;

分类

  • 系统存储进程:存储在 master 数据库中,以
    “sp_”为前缀,用于从系统表中获取音讯。
  • 用户自定义存储进度:T-SQL存储进度、CL中华V存储进程、临时存储进程。不只怕将CL本田CR-V存储进度成立为权且存储进程。

创建

1  create proc|procedure 存储过程名
2        (@parameter 参数数据类型 [,...])
3  as
4  begin
5    < SQL语句代码块 
6    return >
7  end

返回值

  • 动用 return 再次来到3个值;
  • 使用 output 定义重返参数来回到几个值; 

维护
· 查看:
  [1]. exec sp_helptext 存储进程名;
  [2]. sys.sql_modules目录视图;
  [3]. object_definition元数据函数; 
· 加密:with encryption
· 修改:直接将 create 替换为
alter;
· 删除:drop proc 存储过程名;
执行

  • 语法分析阶段
  • 解析阶段
  • 编译阶段:分析存储进程、生成存储进度执行布置。执行安插存储在进度飞快缓存区(专门用于存储已经编译过的询问规划的缓冲区)。
    • 双重编译:[1].sp_recompile;[2]. 执行时在 exec 语句中采纳with recompile;
  • 推行等级

9.
触发器

Trigger,触发器是不一致经常的存储进程,由 事件
自动触发,无法显式调用,主要用来掩护和进步数据的(一致/引用)完整性约束和事务规则([1].
约束;[2]. 触发器)。触发器可以级联嵌套。常用的 inserted 和 deleted
表是针对当前触发器的一对表,在高速缓存中蕴藏新插入或删除的行数据的副本。可以清楚为委托事件。经常触发器只与单个表关联。 
自律 vs 触发器 vs 存储进度
自律紧要被用来强制数据的完整性,能提供比触发器更好的属性;触发器常用来评释工作规则或是复杂的数目证实。触发器可以兑现约束的成套成效,但先行通过自律完毕。

  • 错误新闻管理:约束只好利用规则的系列错误新闻,触发器可以自定义错误音信;
  • 属性差别;
  • 管理爱护的工作量; 

参考:封锁与数据库对象规则、暗许值+数据库设计中约束、触发器和存储进度;
事件 –
-> 触发器 – -> 存储进程
·  DML
触发器:响应数据操作语言事件,将触发器和接触它的口舌作为可在触发器内回滚的单个事务;常用、品质开支小,可以兑现相关表数据的级联更改、评估数据修改前后表的场地。
ζ  AFTEPAJERO 触发器:在 IUD
操作、INSTEAD OF 触发器和束缚处理未来被点燃;推荐且不得不在表上指定; 
ζ  INSTEAD OF
触发器:在封锁处理从前被点燃(执行预处理补充约束操作),钦命执行DML触发器以替代经常的接触动作,优先级高于触发语句的操作;
注:每一个表或试图针对各类 DML
触发操作 IUD,有且不得不有二个应和的 INSTEAD OF 触发器,可以有多个照应的
AFTERAV4 触发器。
ζ  CL中华V触发器:执行在托管代码中的方法;
·  DDL 触发器:响应数据定义语言事件,用于在数据库中履行管理职务;
·  登录触发器:响应 logon 事件,用于审核和控击溃务器会话;
优点

  • 预编译、已优化,执行效用高;
  • 已封装,安全、易维护;
  • 可重复使用;

缺点

  • 占用服务器能源多;
  • 前置触发(事后诸葛武侯);

创办与尊敬
·  DDL

  create/alter trigger 触发器名称
        on 作用域(DDL:数据库名database/服务器名all server)
        FOR create|alter|drop|grant 等DDL触发器
   as SQL处理语句

  删除: drop trigger 触发器名;  修改: create – -> alter  
·  DML

  create trigger 触发器名称
       on 作用域(DML:表名/视图名)
       [FOR|AFTER|INSTEAD OF] {[insert [,] update [,] delete]}
   as SQL处理语句

  嵌套:级联触发,递归触发
   ·  直接递归:更新T,触发Trig,Trig更新T,再次触发Trig;
   ·
直接递归:更新T1,触发Trig1,Trig1翻新T2,T2触发Trig2,Trig2更新T1;
  参考:怎样控制触发器递归;

10.
事务 – 锁

 具体参考 政工和锁 –
sqh;

11.
全文索引

全文索引是一种独特类型的基于标记的作用性索引,用于加强在大数量文本中找寻钦点关键字的快慢,由 全文索引引擎服务 (SQL Server
FullText Search)创立和保安。全文索引创立和保安的历程称为填充:完全填充、基于时间戳的增量式填充、基于更改追踪的填充。全文索引只可以在数据表上成立。
全文索引 .vs. 普通索引

  • 一般说来索引选拔B-Tree结构,全文索引基于标记生成倒排、堆积且压缩的目录;
  • 日常索引适于字符/字段/短文本查询,全文索引是基于关键字查询的目录,针对语言词语/长文本搜索;
  • 各种表允许有若干个一般索引,全文索引只好有多个;
  • 一般说来索引自动更新、实时性强,全文索引须求定期维护;

全文目录 全文索引
仓储全文索引,是创设全文索引的前提。全文目录是编造对象,是表示全文索引的逻辑概念。全文目录和全文索引都是为全文检索查询服务。

  • rebuild:重新生成全文目录;
  • reorganize:优化全文目录;

    create fulltext catalog 全文目录名
    create fulltext index on 全文索引基于的表名[索引包罗的列列表]

原理:两步走
对文本实行分词,并为每二个产出的单词记录三个索引项以保留出现过该单词的有所记录的消息。全文索引引擎对进入到全文索引的列中的内容按字/词建立目录条目,即先定义二个词库,然后在篇章中找寻逐个词条(term)出现的频率和岗位,把这个频率地方消息按词库顺序归结,已毕对文件建立二个以词库为目录的目录。
· 创立基于关键字查询的目录
     如何对文件举行分词:二元分词法、最大匹配法和总结办法
     建立目录的数据结构:采取倒排索引的结构
· 在目录中找找一定
   全文谓词:在
select 的 where/having 子句中钦点
     contains:精确。简单词、派生词、加权词、前缀词、邻近词;
     freetext:模糊。文本拆分,分别搜索;
   行集函数:在 from
子句中钦命
     containstable:
     freetexttable:

参考:全文索引原理介绍;全文索引原理及范例;

1.4 常见关周详据库

Oracle在并行处理、实时性、数据处理速度方面都有较好的性质。

1.4 常见关周详据库

Oracle在并行处理、实时性、数据处理速度方面都有较好的性质。

SQL-Server Helper

1. 上面给出 SQL-Server
数据库命令执行的三种格局样例

997755.com澳门葡京 1997755.com澳门葡京 2

 1 public static bool ExecuteSqlNoResult(string sql)
 2 {
 3     using(SqlConnection conn = new SqlConnection())
 4     {
 5         try
 6         {
 7             conn.ConnectionString = RVCConnectingString;
 8             conn.Open();
 9             SqlCommand command = new SqlCommand(sql, conn);
10             command.ExecuteNonQuery();
11             return true;
12         }
13         catch(Exception ex)
14         {
15             // 
16             return false;
17         }
18     }
19 }

[1]. 执行SQL,无重临值

其间,SqlCommand表示要对SQL
Server数据库执行的三个Transact-SQL语句或存储进程。不能继续此类。

997755.com澳门葡京 3997755.com澳门葡京 4

 1 public static bool ExecuteSqlWithResult(string sql, out DataTable dtResult)
 2 {
 3     using(SqlConnection conn = new SqlConnection())
 4     {    
 5         dtResult = new DataTable(); 
 6         try
 7         {
 8             conn.ConnectionString = DatabaseConnectingString;
 9             conn.Open();
10             SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
11             sda.Fill(dtResult);
12             return true;
13         }
14         catch(Exception ex)
15         {
16             // 
17             return false;
18         }
19     }
20 }

[2]. 执行SQL,重回结果

其间,SqlData艾达pter代表用于填充System.Data.DataSet和更新SQL
Server数据库的一组数据命令和二个数据库连接。不能继续此类。

997755.com澳门葡京 5997755.com澳门葡京 6

 1 public static bool ExecuteSqlTrans(List<string> sqlList)
 2 {
 3     using(SqlConnection conn = new SqlConnection())
 4     {
 5         SqlTransaction sqlTrans = null;
 6         try
 7         {
 8             conn.ConnectionString = DatabaseConnectingString;
 9             conn.Open();
10             
11             sqlTrans = conn.BeginTransaction();
12             SqlCommand command = new SqlCommand();    
13             command.Transaction = sqlTrans;
14             command.Connection = conn;
15             
16             string sql = null;
17             foreach(string sqlTmp in sqlList)
18             {
19                 sql = sqlTmp;
20                 command.CommandText = sql;
21                 command.ExecuteNonQuery();
22             }
23             
24             // 提交事务(前面执行无误的情况下)
25             sqlTrans.Commit();
26             return true;
27         }
28         catch(Exception ex)
29         {
30             if(sqlTrans != null)
31             {
32                 // 执行出错,事务回滚
33                 sqlTrans.RollBack();
34             }
35             retrun false;
36         }
37     }
38 }

[3].
批量举办SQL,以作业格局

里头,SqlTransaction表示要在 SQL Server 数据库中拍卖的 Transact-SQL
事务。不大概持续此类。

2.
判断表、存储进度等的存在性

// 判断普通表
IF NOT EXISTS( SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'TableName') AND OBJECTPROPERTY(ID, 'IsTable')=1 )
BEGIN
CREATE TABLE TableName(
    ... ...
)
END

// 判断存储过程
IF exists(select 1 from sysobjects where id=object_id('ProcName') and xtype='P')
    DROP PROC ProcName
GO

// 判断临时表
IF object_id('tempdb..#TAB_Tmp_Name') is not null 
BEGIN
    DROP table #TAB_Tmp_Name
END;
CREATE table #TAB_Tmp_Name(
  ... ...  
);

3

 

SQL-Server Helper

1. 上面给出 SQL-Server
数据库命令执行的二种艺术样例

997755.com澳门葡京 7997755.com澳门葡京 8

 1 public static bool ExecuteSqlNoResult(string sql)
 2 {
 3     using(SqlConnection conn = new SqlConnection())
 4     {
 5         try
 6         {
 7             conn.ConnectionString = RVCConnectingString;
 8             conn.Open();
 9             SqlCommand command = new SqlCommand(sql, conn);
10             command.ExecuteNonQuery();
11             return true;
12         }
13         catch(Exception ex)
14         {
15             // 
16             return false;
17         }
18     }
19 }

[1]. 执行SQL,无重临值

其中,SqlCommand表示要对SQL
Server数据库执行的七个Transact-SQL语句或存储进度。无法继续此类。

997755.com澳门葡京 9997755.com澳门葡京 10

 1 public static bool ExecuteSqlWithResult(string sql, out DataTable dtResult)
 2 {
 3     using(SqlConnection conn = new SqlConnection())
 4     {    
 5         dtResult = new DataTable(); 
 6         try
 7         {
 8             conn.ConnectionString = DatabaseConnectingString;
 9             conn.Open();
10             SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
11             sda.Fill(dtResult);
12             return true;
13         }
14         catch(Exception ex)
15         {
16             // 
17             return false;
18         }
19     }
20 }

[2]. 执行SQL,返回结果

里头,SqlDataAdapter表示用于填充System.Data.DataSet和翻新SQL
Server数据库的一组数据命令和三个数据库连接。无法继续此类。

997755.com澳门葡京 11997755.com澳门葡京 12

 1 public static bool ExecuteSqlTrans(List<string> sqlList)
 2 {
 3     using(SqlConnection conn = new SqlConnection())
 4     {
 5         SqlTransaction sqlTrans = null;
 6         try
 7         {
 8             conn.ConnectionString = DatabaseConnectingString;
 9             conn.Open();
10             
11             sqlTrans = conn.BeginTransaction();
12             SqlCommand command = new SqlCommand();    
13             command.Transaction = sqlTrans;
14             command.Connection = conn;
15             
16             string sql = null;
17             foreach(string sqlTmp in sqlList)
18             {
19                 sql = sqlTmp;
20                 command.CommandText = sql;
21                 command.ExecuteNonQuery();
22             }
23             
24             // 提交事务(前面执行无误的情况下)
25             sqlTrans.Commit();
26             return true;
27         }
28         catch(Exception ex)
29         {
30             if(sqlTrans != null)
31             {
32                 // 执行出错,事务回滚
33                 sqlTrans.RollBack();
34             }
35             retrun false;
36         }
37     }
38 }

[3].
批量推行SQL,以工作格局

内部,SqlTransaction表示要在 SQL Server 数据库中拍卖的 Transact-SQL
事务。不可以继续此类。

2.
判断表、存储进度等的存在性

// 判断普通表
IF NOT EXISTS( SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'TableName') AND OBJECTPROPERTY(ID, 'IsTable')=1 )
BEGIN
CREATE TABLE TableName(
    ... ...
)
END

// 判断存储过程
IF exists(select 1 from sysobjects where id=object_id('ProcName') and xtype='P')
    DROP PROC ProcName
GO

// 判断临时表
IF object_id('tempdb..#TAB_Tmp_Name') is not null 
BEGIN
    DROP table #TAB_Tmp_Name
END;
CREATE table #TAB_Tmp_Name(
  ... ...  
);

3

 

第六章 创制与管理数据库

第陆章 创设与管理数据库

4.1 认识数据库

4.1 认识数据库

4.1.1 数据库基本概念

关周详据库
关周密据库是永葆关系模型的数据库。关系模型由关全面据结构、关系操作集合和完整性约束3片段组成。

  1. 关系数据结构:在啊关系模型中数据结构单一,现实世界的实体以及实体间的牵连均用关系来代表,实际上关系模型中数据结构就是一张二维表
  2. 关系操作集合:关系操作分为关系代数、关系演算、具有关系代数和关联演算双重特点的语言(SQL语言)
  3. 完整性约束

    ### 4.1.2 数据库常用对象

  • :表是富含数据库中全体数据的数据库对象,由行和列组成,用于集体和储存数据。
  • 字段:表中每列成为2个字段,字段具有温馨的性质,如字段类型、字段大小等。其中,字段类型是字段最重点的天性,它控制了字段可以存储哪一种多少。
  • 索引:索引是一个独立的、无力的数据库结构。它是凭借于表建立的,在数据库中索引是数据库程序无需对总体表展开围观,就能够在内部找到所需的数量。
  • 视图:视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种艺术。表中包含几个被定义的数据列与数据行,其结构和数目建立在对表的询问基础上。
  • 存储过程:存储进度是一组为了做到一定作用的SQL语句集合(包涵查询、插入、删除和翻新等操作),经编现在以名称的方式储存在SQL
    Server服务器端的数据库中,由用户通过制订存储进程更的名字来实施。当以此蕴藏进度被调用执行时,那么些操作也会被同时执行。

    4.2 SQL Server的命名规范

    ### 4.2.1 标识符

  1. 标识符格式
  • 标识符的首字符必须是Unicode所定义字符,’_’ ‘@’ ‘#’。
    ‘@’起先的标识符表示局地变量或参数
    ‘#’先河的标识符表示权且表或进程
    ‘##’开始的标识符表示全局权且对象
  • 标识符后的接轨字符
    Unicode 2.0 标准中所定义的假名。
    源于拉丁字母或别的国家/地区脚本的十进制数字。
    ‘@’ ‘$’ ‘#’ ‘_’
  • 标识符不允许是Transact-SQL的保留字
    微软官方文档
  • 不容许嵌入空格或任何特殊字符
  1. 标识符分类
  • 正规标识符:符合标识符的格式规则
  • 相隔标识符:包括在“”[]内的标识符。该标识符可以不吻合标识符的格式规则。

    ### 4.2.2 对象命名规则

    在3个数据库中开创了2个数据库对象后,数据库对象的完整名称应当由服务器名、数据库名、拥有者名和对象名4部分构成
    [[[server.][database].][owner_name].]object_name
    服务器、数据库和全体者的名号即所谓的靶子名称限定符。当引用3个目的时,不需求内定服务器、数据库和主人,可以拔取句号标出她们的职位,从而省略限定符。
    内定了装有4哥部分的目标名称被誉为完全合法名称。

    ### 4.3.3 使用管理器删除数据库

    去除数据库时务必满意以下条件

  • 如若数据库设计日志传输操作,在剔除数据库此前务必撤回日志传送操作

  • 若要删除为业务复制发布的数据库,或删除为联合复制发表或订阅的数据库,必须首先从数据库中除去复制。要是数据库已破坏,不只怕去除复制,可以先将数据库设置为脱机状态,然后再删除数据库。
  • 设若数据库中设有数据库快照,必须首先删除数据库快照。
    系统数据库(msdb、model、master、tempdb)无法删除,删除数据库后应立即备份master数据库,因为删除数据库将更新master数据库中的信息。

    第6章 操作数据表与视图

    5.1 数据表基础知识

    ### 5.1.1 基本数据类型

    着力数据类型详情
    char、varchar、nchar、nvarchar的区别:

    ### 5.1.2 用户定义数据类型

  1. 应用T-SQL语句创立用户自定义数据类型

始建用户自定义数据类型
语法:

sp_addtype [ @typename = ] type,   
    [ @phystype = ] system_data_type   
    [ , [ @nulltype = ] 'null_type' ] ;

实例:

USE test
EXEC sp_addtype postcode,'char(8)','not null'

除去用户自定义数据类型
语法:

sp_droptype [ @typename = ] 'type'

实例:

USE test
EXEC sp_droptype postcode

4.1.1 数据库基本概念

关周密据库
关全面据库是帮衬关系模型的数据库。关系模型由关周全据结构、关系操作集合和完整性约束3有的构成。

  1. 关系数据结构:在啊关系模型中数据结构单一,现实世界的实体以及实体间的联系均用关系来表示,实际上关系模型中数据结构就是一张二维表
  2. 关系操作集合:关系操作分为关系代数、关系演算、具有关系代数和事关演算双重特点的语言(SQL语言)
  3. 完整性约束

    ### 4.1.2 数据库常用对象

  • :表是包蕴数据库中持有数据的数据库对象,由行和列组成,用于组织和储存数据。
  • 字段:表中每列成为一个字段,字段具有温馨的属性,如字段类型、字段大小等。其中,字段类型是字段最要害的性质,它决定了字段能够存储哪类多少。
  • 索引:索引是一个单独的、无力的数据库结构。它是器重于表建立的,在数据库中索引是数据库程序无需对整个表展开围观,就可以在内部找到所需的数据。
  • 视图:视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种方法。表中包罗多少个被定义的数据列与数据行,其结构和数量建立在对表的询问基础上。
  • 存储过程:存储进程是一组为了成功一定作用的SQL语句集合(包括查询、插入、删除和换代等操作),经编将来以名称的样式储存在SQL
    Server服务器端的数据库中,由用户通过制订存储进程更的名字来施行。当以此蕴藏进度被调用执行时,那几个操作也会被同时执行。

    4.2 SQL Server的命名规范

    ### 4.2.1 标识符

  1. 标识符格式
  • 标识符的首字符必须是Unicode所定义字符,’_’ ‘@’ ‘#’。
    ‘@’开首的标识符表示局地变量或参数
    ‘#’初阶的标识符表示一时表或进度
    ‘##’初阶的标识符表示全局一时对象
  • 标识符后的继续字符
    Unicode 2.0 标准中所定义的假名。
    起源拉丁字母或任何国家/地区脚本的十进制数字。
    ‘@’ ‘$’ ‘#’ ‘_’
  • 标识符不同意是Transact-SQL的保留字
    微软官方文档
  • 不相同意嵌入空格或其余特殊字符
  1. 标识符分类
  • 常规标识符:符合标识符的格式规则
  • 相隔标识符:包罗在“”[]内的标识符。该标识符可以不适合标识符的格式规则。

    ### 4.2.2 对象命名规则

    在一个数据库中制造了1个数据库对象后,数据库对象的完全名称应当由服务器名、数据库名、拥有者名和对象名4局地构成
    [[[server.][database].][owner_name].]object_name
    服务器、数据库和主人的名号即所谓的靶子名称限定符。当引用二个目的时,不必要内定服务器、数据库和主人,可以动用句号标出她们的职分,从而省略限定符。
    点名了具有4哥部分的对象名称被称作完全合法名称。

    ### 4.3.3 使用管理器删除数据库

    删去数据库时必须满足以下规则

  • 设若数据库设计日志传输操作,在剔除数据库以前必须撤回日志传送操作

  • 若要删除为作业复制公布的数据库,或删除为联合复制公布或订阅的数据库,必须首先从数据库中删除复制。若是数据库已破坏,不恐怕去除复制,可以先将数据库设置为脱机状态,然后再删除数据库。
  • 只要数据库中留存数据库快照,必须首先删除数据库快照。
    系统数据库(msdb、model、master、tempdb)不可以删除,删除数据库后应立即备份master数据库,因为删除数据库将更新master数据库中的信息。

    第6章 操作数据表与视图

    5.1 数据表基础知识

    ### 5.1.1 基本数据类型

    骨干数据类型详情
    char、varchar、nchar、nvarchar的区别:

    ### 5.1.2 用户定义数据类型

  1. 采用T-SQL语句创立用户自定义数据类型

创办用户自定义数据类型
语法:

sp_addtype [ @typename = ] type,   
    [ @phystype = ] system_data_type   
    [ , [ @nulltype = ] 'null_type' ] ;

实例:

USE test
EXEC sp_addtype postcode,'char(8)','not null'

删去用户自定义数据类型
语法:

sp_droptype [ @typename = ] 'type'

实例:

USE test
EXEC sp_droptype postcode

5.1.3 数据表的数据完整性

Microsost SQL Server 二〇〇九提供两种要挟数据完整性的体制。

  1. NULL or NOT NULL
    表的每一列都有一组属性,如名称、数据类型、数据长度和为空性等,列的富有属性即构成列的定义。列可以定义为允许或不容许空值。
  • NULL:暗中同意意况下,列允许空值,即允许用户在加码多少是省略该列的值。
  • NOT NULL:不容许在未曾点名列暗中同意值的图景下该列的值。
  1. 默认值
    比方在插入行时没有点名列的值,那么私行认同值将点名列中所使用的值。暗许值可以使其余取值为常量的靶子,如放置函数和数学表明式等。
  • 在CREATE
    TABLE中接纳DEFAULT关键字成立默许定义,将常量表明式指派为列的暗许值,那是正规方法。
    – 使用CREATE
    DEFAULT语句创建默认对象,然后使用sp\_bindefault系统存储过程将它绑定到列上,这个一个向前兼容的功能。
    [此效用将在Microsoft
    SQL Server的前景版本中剔除]
  1. IDENTITY(特征标识属性)
    数据表中一旦某列被派遣IDENTITY,系统将活动为表中插入的新行生成屡次三番递增的号子。因为标识值平常唯一,所以标识列经常定义为主键。
    IDENTITY属性适用于INT、SALLINT、TINYINT、DEGran LavidaL(P,0)、UMELacrosseIC(P,0)数据类型的列。
  2. 约束
    封锁是用来定义Microsoft SQL Server
    二零零六自行强制数据库完整性的不二法门。使用约束优先于采取触发器、规则和私下认同值。SQL
    Server 2010中共有以下5种约束。
  • NOT
    NULL:使用户必须在表的内定列中输入2个值。各个表中可以有多少个非空约束。
  • Check(检查):用来内定一个布尔操作,限制输入到表中的值。
  • Unique(唯一性):建立一列或多列的整合以唯一标识表中的每一行。渐渐得以确保实体完整性,2个表只可以有3个主键,同时逐步中的列无法承受空值。
  • Foreign
    key(外键):用于建立和增长多个表数据里面的链接的一列或多列。当3个表中作为主键的一列被添加到另2个表中时,链接就创建了,首要目的是控制存储在外键表中的数码。

    5.3 创制、删除和改动约束

    自律是SQL
    Server提供的机动强制数据完整性的一种艺术,它是由此定义列的取值规则来保护数据的完整性,是挟持完整性的科班机制。使用约束优先于拔取触发器、规则和默许值。查询分析器也应用约束定义生成高品质的询问执行安顿。

    ### 5.3.3 UNIQUE约束

    当在表中已创制主键,但又要保管其他数据列的值唯一时,可以动用UNIQUE约束。
    应用UNIQUE约束可以保险在非主键列中部输入重复的值。UNIQUE约束和PEvoqueIMASportageY
    KEY约束都负有强制唯一性,但想要强制一列或多列组合(不是P宝马7系IMAENCOREY
    KEY)的唯一性时,应采纳UNIQUE约束而不是P路虎极光IMARubiconY KEY约束。
    可以对一个表定义多个UNIQUE约束,但只能定义一个PRIMARY KEY约束。而且UNIQUE约束允许NULL。当与参与UNIQUE约束的任何值一起使用时,每列只允许一个NULL。FOREIGN KEY约束可以引用UNIQUE约束。
    操作:

表->设计->索引/键->增加
列:选择列
类型:唯一键

5.1.3 数据表的数据完整性

Microsost SQL Server 二〇一〇提供种种恐吓数据完整性的体制。

  1. NULL or NOT NULL
    表的每一列都有一组属性,如名称、数据类型、数据长度和为空性等,列的有着属性即构成列的定义。列可以定义为允许或不允许空值。
  • NULL:默许情形下,列允许空值,即允许用户在扩充数据是省略该列的值。
  • NOT NULL:不相同意在向来不点名列默认值的气象下该列的值。
  1. 默认值
    若果在插入行时没有点名列的值,那么默许值将点名列中所使用的值。暗中认同值可以使其余取值为常量的目的,如放置函数和数学表明式等。
  • 在CREATE
    TABLE中使用DEFAULT关键字创造暗许定义,将常量表明式指派为列的专断认同值,那是规范方法。
    – 使用CREATE
    DEFAULT语句创建默认对象,然后使用sp\_bindefault系统存储过程将它绑定到列上,这个一个向前兼容的功能。
    [此功效将在Microsoft
    SQL Server的前景版本中剔除]
  1. IDENTITY(特征标识属性)
    数据表中假诺某列被派出IDENTITY,系统将机关为表中插入的新行生成两次三番递增的号子。因为标识值日常唯一,所以标识列平时定义为主键。
    IDENTITY属性适用于INT、SALLINT、TINYINT、DE逸致L(P,0)、UME福睿斯IC(P,0)数据类型的列。
  2. 约束
    封锁是用来定义Microsoft SQL Server
    二零零六机动强制数据库完整性的主意。使用约束优先于采纳触发器、规则和暗许值。SQL
    Server 2010中共有以下5种约束。
  • NOT
    NULL:使用户必须在表的钦命列中输入二个值。每一个表中可以有多少个非空约束。
  • Check(检查):用来内定一个布尔操作,限制输入到表中的值。
  • Unique(唯一性):建立一列或多列的整合以唯一标识表中的每一行。逐步得以确保实体完整性,二个表只能够有叁个主键,同时逐年中的列不可以接受空值。
  • Foreign
    key(外键):用于建立和拉长八个表数据里面的链接的一列或多列。当七个表中作为主键的一列被添加到另一个表中时,链接就确立了,首要目标是决定存储在外键表中的多寡。

    5.3 创制、删除和修改约束

    封锁是SQL
    Server提供的自行强制数据完整性的一种艺术,它是透过定义列的取值规则来维护数据的完整性,是强制完整性的正式编制。使用约束优先于接纳触发器、规则和默许值。查询分析器也利用约束定义生成高品质的询问执行布署。

    ### 5.3.3 UNIQUE约束

    当在表中已开立主键,但又要力保其余数据列的值唯目前,能够应用UNIQUE约束。
    行使UNIQUE约束可以确保在非主键列中部输入重复的值。UNIQUE约束和PHighlanderIMACRUISERY
    KEY约束都抱有强制唯一性,但想要强制一列或多列组合(不是P途睿欧IMALacrosseY
    KEY)的唯一性时,应采取UNIQUE约束而不是PTiguanIMA奔驰G级Y KEY约束。
    可以对一个表定义多个UNIQUE约束,但只能定义一个PRIMARY KEY约束。而且UNIQUE约束允许NULL。当与参与UNIQUE约束的任何值一起使用时,每列只允许一个NULL。FOREIGN KEY约束可以引用UNIQUE约束。
    操作:

    表->设计->索引/键->增加
    列:选择列
    类型:唯一键
    

    ### 5.3.4 CHECK约束

    CHECK约束通过限制输入到列中的值来强制域的完整性。此类约束类似于FOREIGN
    KEy约束,可以操纵放入到列中的值。

  • FOREIGN KEY约束:从任何表拿到有效值列表

  • CHECK约束:通过不急于求成其余列中的数据的逻辑表明式明确有效值。
    开创CHECK约束可以将某列数据的取值范围界定在钦定的限制内,从而幸免输入的数额当先钦命的限定。
    操作

    表->设计->CHECK约束->增加
    表达式:old>18 and old<100
    

    ### 5.3.5 暗许约束

    暗中认可约束使用户可以定义贰个值,每当用户没有在某一列中输入值时,则将所定义的值提须要这一列。若是用户对此列没有一定的渴求,可以使用暗中认同约束来为此列输入暗许值。
    即使列为NOT NULL,设置默认约束后,可不进行输入,会使用默认值。
    操作

    表->设计->选中列->列属性
    默认值或绑定:https://image.baidu.com/s/101.jpg
    

    ### 5.3.6 FK(外键)约束

    FK适用于建立多个表数据里面三番五次的一列或多列。通过将保存表中主键值的一列或多列增添到另1个表中,可创立多个表之间的链接,这些列就改成第3个表的外键。
    操作

    表->设计->关系->增加
    表和列规范:选择主键表的列和外键表的列
    INSERT和UPDATE规范
    删除规则
    不执行任何操作:报错不执行
    级联:删除主键表列的同时将关联的外键表中的列同时删除
    更新规则
    级联:更新主键表列的同时将关联的外键表中的列同时更新
    

SQL的主键和外键的法力:
外键取值规则:空值或参照的主键值。

  • 插入非空值时,假若主键表中没有这几个值,则无法插入。
  • 创新时,不可以改为主键表中没有的值。
  • 除去主键表记录时,你可以在建外键时选定外键记录一起级联删除如故驳回删除。
  • 立异主键记录时,同样有级联更新和拒绝执行的抉择。

    5.4 关系的始建与保安

    ### 5.4.1 一对一涉及

    在一对一涉嫌中,半数以上有关新闻都在八个表中。特点

  • 分开2个带有许多列的表

  • 是因为安全考虑而隔离表的某一部分
  • 仓储可以很简单删除的目前数据,只需删除表即可删除这么些数据
  • 存储值应用于主表子集的音讯。
    即便连个相关列都以主键或持有唯一约束关系,创设的就是一对一涉嫌。

    ### 5.4.2 一对多关系

    一对多涉及是最广泛的关联项目,是指表A中的行可以在表B中有好多匹配行,可是表B中的行只幸好表A中有一个匹配行
    若果在相关列中只有一列是主键或具备唯一约束,则创设的是一对多涉及。

    ### 5.4.3 多对多涉及

    多对多关系是指涉嫌中各类表的行在相关表中持有八个匹配行。在数据库中,多对多关系的建立是依靠第叁哥表即连接表已毕的,连接表包蕴相关的五个表的主键列,然后从多少个相关表的主键列分别创造与链接表中匹配列的关系。

    5.5 视图概述

    视图是一种常用的数据库对象,它将查询的结果以虚拟表的花样储存在多少中。视图并不在数据库中以存储数据集的款型存在。视图的社团和故事情节是确立在对表的询问基础之上的,和表一样席卷行和列,那么些行列数据都来自其所引述的表,并且是在引用视图进度中动态变化的。
    视图中的内容是有询问定义来的,并且视图和查询都以通过SQL语句定义的,他们全部广大一律和分歧之处。

× 视图 查询
存储 视图存储为数据库设计的一部分, 查询不存储
排序 只有当视图包括TOP子句才能排序视图 可以排序任何查询结果
加密 可以加密视图 不能加密查询

可以禁止全数用户访问数据库的基表,而要求用户只能够通过视图操作数据。那种办法可以维护用户和应用程序不受有些数据库修改的熏陶

5.3.4 CHECK约束

CHECK约束通过限制输入到列中的值来强制域的完整性。此类约束类似于FOREIGN
KEy约束,可以决定放入到列中的值。

  • FOREIGN KEY约束:从此外表拿到有效值列表
  • CHECK约束:通过不急功近利其余列中的数据的逻辑表明式分明有效值。
    始建CHECK约束可以将某列数据的取值范围限制在钦命的限量内,从而防范输入的数码超出指定的范围。
    操作

表->设计->CHECK约束->增加
表达式:old>18 and old<100

5.6 使用集团管理器管理视图

规范视图:保存在数据库中的SELECT查询语句,即常常意义上精晓的视图。
索引视图:创造有目录的视图成为索引视图。他因此计算并蕴藏有投机的数额,可以进步有个别连串查询的属性,特别适用于聚集许多行的查询,但不太适合于平时更新的骨干数据集。
分区视图:是在一台或多台服务器间水平统一一组表中的分区数据,以使数据看上去来源于一个表。

5.3.5 暗中同意约束

暗许约束使用户可以定义八个值,每当用户并未在某一列中输入值时,则将所定义的值提须求这一列。若是用户对此列没有特定的渴求,可以应用暗中同意约束来为此列输入专擅认同值。
即使列为NOT NULL,设置默认约束后,可不进行输入,会使用默认值。
操作

表->设计->选中列->列属性
默认值或绑定:https://image.baidu.com/s/101.jpg

5.3.6 FK(外键)约束

FK适用于建立八个表数据里面一而再的一列或多列。通过将保存表中主键值的一列或多列增加到另3个表中,可创建五个表之间的链接,这一个列就改成第①个表的外键。
操作

表->设计->关系->增加
表和列规范:选择主键表的列和外键表的列
INSERT和UPDATE规范
删除规则
不执行任何操作:报错不执行
级联:删除主键表列的同时将关联的外键表中的列同时删除
更新规则
级联:更新主键表列的同时将关联的外键表中的列同时更新

SQL的主键和外键的职能:
外键取值规则:空值或参考的主键值。

  • 布置非空值时,纵然主键表中没有这些值,则不可以插入。
  • 更新时,不只怕改为主键表中没有的值。
  • 删去主键表记录时,你可以在建外键时选定外键记录一起级联删除依旧拒绝删除。
  • 履新主键记录时,同样有级联更新和拒绝执行的接纳。

    5.4 关系的始建与保安

    ### 5.4.1 一对一事关

    在一对一关系中,半数以上相关新闻都在二个表中。特点

  • 细分二个涵盖许多列的表

  • 鉴于安全着想而隔离表的某一片段
  • 储存可以很简单删除的目前数据,只需删除表即可删除那个多少
  • 存储值应用于主表子集的消息。
    倘诺连个相关列都是主键或具备唯一约束关系,创立的就是一对一关系。

    ### 5.4.2 一对多关系

    一对多涉及是最普遍的涉嫌项目,是指表A中的行可以在表B中有不胜枚举匹配行,不过表B中的行只可以在表A中有2个匹配行
    假如在相关列中唯有一列是主键或富有唯一约束,则创制的是一对多涉及。

    ### 5.4.3 多对多涉及

    多对多关系是指涉嫌中各类表的行在相关表中具有八个匹配行。在数据库中,多对多关系的确立是凭借第③哥表即连接表落成的,连接表包蕴相关的多少个表的主键列,然后从多少个相关表的主键列分别创制与链接表中匹配列的涉及。

    5.5 视图概述

    视图是一种常用的数据库对象,它将查询的结果以虚拟表的形式储存在数码中。视图并不在数据库中以存储数据集的款式存在。视图的构造和情节是赤手空拳在对表的查询基础之上的,和表一样席卷行和列,那么些行列数据都来源于其所引述的表,并且是在引用视图进度中动态变化的。
    视图中的内容是有查询定义来的,并且视图和询问都以通过SQL语句定义的,他们所有许多同等和不相同之处。

× 视图 查询
存储 视图存储为数据库设计的一部分, 查询不存储
排序 只有当视图包括TOP子句才能排序视图 可以排序任何查询结果
加密 可以加密视图 不能加密查询

可以禁止全数用户访问数据库的基表,而需求用户只可以通过视图操作数据。那种方法可以维护用户和应用程序不受有个别数据库修改的熏陶

5.6 使用集团管理器管理视图

业内视图:保存在数据库中的SELECT查询语句,即常常意义上知道的视图。
索引视图:创制有目录的视图成为索引视图。他通过计量并蕴藏有温馨的多寡,可以增加有个别项目查询的品质,越发适用于聚集许多行的询问,但不太符合于平时更新的中坚数据集。
分区视图:是在一台或多台服务器间水平统一一组表中的分区数据,以使数据看上去来源于三个表。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website