SQL Server数据库基本概念、组成、常用对象与约束


Posted in SQL Server onMarch 20, 2022

二、基本概念

1、数据库

数据库(DB):即DataBase的缩写,是按照一定的数据结构来组织、存储和管理数据的一个仓库。是存储在一起的相关数据的一个集合。可以把数据库想象成一个文件柜,文件柜里面又包含有多个文件夹,而文件夹里面又包含有多个文件。

数据库根据作用的不同,又可以分为两种:

  • 关系型数据库。是建立在关系模型基础上的数据库,借助于集合、数学等观念和方法来处理数据库的数据。比如SQL Server、MySQL、Access等。
  • 非关系型数据库。非关系型数据库也被称为NoSQL数据库,NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“NO SQL”的意思。非关系型数据库的产生不是要彻底否定关系型数据库,而是作为传统数据库的一个有效补充。

2、数据库管理系统

数据库管理系统(DBMS):即DataBase Management System的缩写,是为了管理数据库而设计的一个电脑软件系统。是用来操作和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过DBMS访问数据库中的数据,数据库管理员也可以通过DBMS进行数据库的维护工作。它可以支持多个应用程序和用户用不同的方法在同时或不同时刻去建立、修改和询问数据库。大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

3、数据库系统

数据库系统是由数据库和数据库管理系统组成的。

二、数据库的组成

数据库是以文件的形式存在,由文件和文件组组成的。

1、文件

数据库文件分为以下几种类型:

  • 主要数据文件:主要数据文件里面存放的是数据和数据库的一些初始化信息。每个数据库有且只有一个主要数据文件。主要数据文件以.mdf为扩展名。
  • 次要数据文件:次要数据文件里面存放的是除了主要数据文件之外的所有数据。次要数据文件不是必须的,可以没有。如果有次要数据文件,可以有一个或者多个。假如数据库的数据非常大,这时候可以把一些数据放到次要数据文件里面。次要数据文件是以.ndf为扩展名。
  • 事务日志文件:事务日志文件存放的是对数据库进行操作的所有日志信息。每个数据库至少要有一个日志文件,也可以有多个。事务日志文件是以.ldf为扩展名。

2、文件组

文件组是数据库文件的一种逻辑管理单位,它将数据库文件分成不同的文件组,方便我们对文件的分配和管理。文件组分为以下两种类型:

  • 主文件组(Primary):主要包含主要数据文件和没有明确指派给其它文件组的文件。
  • 用户自定义文件组:我们在使用脚本创建数据库或者修改数据库的时候,使用fileGroup关键字指定的文件组。

一个文件只能属于一个文件组。

文件组的设计原则:

  • 文件只能是一个文件组的成员。
  • 文件或文件组只能属于一个数据库,不能同时属于多个数据库。
  • 数据和日志信息不能属于同一个文件或文件组。
  • 日志文件不能作为文件组的一部分。因为数据和日志是分开在管理的,所以我们备份的时候可以只备份数据文件或日志文件,恢复的时候也可以只恢复数据文件或日志文件,而不用备份整个数据库。

三、数据库常用对象

这篇文章主要讲解数据库中的常用对象。

1、表

表是包含数据库中所有数据的对象,由行和列组成,用于组织和存储数据。

2、字段

字段就是表中的列。一个表中可以有多个列,也可以只有一个。

字段也有自己的属性:列名、数据类型(决定了该字段存储哪种类型的数据)。

3、视图

数据库里面可以多张表,表里面可以有多个字段。表与表之间可能也存在着关系。视图也可以认为是一张表,但是视图不是真实存在的表,是虚拟表。它可以从一张表或者多张表进行关联查询,把需要的字段提取出来,这些字段就会组合成一种虚拟表。是用户查看数据的一种方式。结构和数据都是建立在对表的查询上的。

4、索引

建立索引是为了给用户提供一种快速访问数据的途径,索引是依赖于表建立的。我们创建索引是针对于表创建的。创建索引之后,使得我们在遍历数据的时候,无需对整张表进行全面的查询,而可以通过索引进行快速的定位查询。可以理解为Word文档里面的目录。

5、存储过程

存储过程是一组为了完成特定功能的SQL语句的集合,存储过程里面可以只有一条查询语句也可以有多条,可以是批量的插入操作,还可以有插入、修改、查询等语句。建立好存储过程之后,需要对其进行生成和编译,编译之后就会存储在数据库之中了。以后使用的时候,直接对其进行调用即可。存储过程只需要进行一次编译。

6、触发器

属于用户自定义的一种SQL事务命令的集合,可以执行多种操作。数据库是针对于表的。当对表执行增删改操作时,会自动执行触发器。

7、约束

约束可以理解为对数据表中列值进行的一种限制。可以是格式上、也可以是值范围的约束。当我们对数据表的某列定义了这种限制,如果我们在对表进行插入数据操作的时候,插入的值不符合这种限制就会阻止插入数据。可以更好的规范表中的列。

8、缺省值

缺省值相当于对表中的列指定一个默认值。当进行插入数据时,如果没有为这个列插入值,那么就会自动以预先设置的默认值进行填充。

四、数据库约束

一、定义

约束:规定表中的数据规则。如果存在违反约束的数据行为,行为就会被阻止。

如果是使用DBMS工具创建表,那么约束必须在创建表之后才能被创建。如果是使用脚本创建表,则可以在脚本中就创建约束。

二、分类

1、主键约束

Primary key约束:主键约束,具有唯一性、非空,不能被修改。

2、外键约束

Foreign key约束:用来加强两个表的一列或者多列数据之间的连接。首先需要建立主表中的主键,然后在定义外键表中的外键。

注意:只有主表中的主键列才能被从表作为外键来使用,其它列不可以作为外键使用。从表中外键的值必须是主表中主键的值,主表限制了从表的更新和插入。当删除主表中的某条数据时,如果该条数据的主键在从表中存在引用,那么必须先删除从表中的引用数据,然后才能删除主表中的数据。如果该条数据在从表中没有引用,那么可以直接删除。

3、Unique约束

Unique:唯一性约束。确保表中的一列数据没有相同的值。与主键约束相似,但又不同。一个表的主键约束只能有一个,唯一性约束可以有多个,也可以没有。而且唯一性约束并非是主键的一列或多列的组合。唯一键可以为null,但主键不可以。

4、Check约束

Check约束:我们可以通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围。 

5、Default约束

Default约束:即默认值约束。用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列。如果没有设置默认值,系统就会把该列设置为null值。

到此这篇关于SQL Server数据库基本概念、组成、常用对象与约束的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

SQL Server 相关文章推荐
SQL Server 数据库实验课第五周——常用查询条件
Apr 05 SQL Server
【HBU】数据库第四周 单表查询
Apr 05 SQL Server
SQL Server连接查询的实用教程
Apr 07 SQL Server
SQLServer2019 数据库环境搭建与使用的实现
Apr 08 SQL Server
sqlserver2017共享功能目录路径不可改的解决方法
Apr 16 SQL Server
SqlServer数据库远程连接案例教程
Jul 15 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
Spark SQL 2.4.8 操作 Dataframe的两种方式
Oct 16 SQL Server
Sql Server之数据类型详解
Feb 28 SQL Server
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
May 25 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
Jun 01 SQL Server
SQL bool盲注和时间盲注详解
Jul 23 SQL Server
详解在SQLPlus中实现上下键翻查历史命令的功能
Mar 18 #SQL Server
SQL Server实现分页方法介绍
Mar 16 #SQL Server
SQL Server中常用截取字符串函数介绍
Mar 16 #SQL Server
通过T-SQL语句创建游标与实现数据库加解密功能
Mar 16 #SQL Server
MySQL 中如何归档数据的实现方法
SQL Server查询某个字段在哪些表中存在
Mar 03 #SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 #SQL Server
You might like
php实现的验证码文件类实例
2015/06/18 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
JavaScript 实现??打印?理
2007/04/28 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
WebPack基础知识详解
2017/01/16 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
python批量将excel内容进行翻译写入功能
2019/10/10 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
上班打牌检讨书
2014/02/07 职场文书
法律系毕业生求职信
2014/05/28 职场文书
个人授权委托书
2014/09/15 职场文书
自荐信模板大全
2015/03/27 职场文书
停课通知书
2015/04/24 职场文书
六五普法心得体会2016
2016/01/21 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android