1.基础概念

  首先要强调一点,就是我们的数据库是由数据库系统来管理的,我们登入数据库并在其上进行操作时最终均要通过数据库系统来完成。可以理解成在数据库上进行操作的是客户端,数据库系统是服务端。一个数据库由具体的数据和数据库对象组成,可将数据库看成一个大容器,里面除了存储数据还有描述这些数据信息的对象,比如表、视图、索引等都是这个数据库里面的对象。我们知道数据库中有4个系统数据库,它们是数据库系统在运行过程中存储数据和记录相关信息的重要组成部分。它们的作用如下所示。

(1)master数据库,如其名字一样是SQL里最重要的数据库,SQL Server能够正常运行的前提正是这个数据库未被破坏。它包含系统用户的配置信息、用户权限信息等系统配置信息。由于master数据库非常重要,因此很有必要对master数据库进行备份。

(2)model数据库,就像在C#中创建的类会自动继承自object一样,我们在数据库中创建的数据库也是有一个创建模板的,这个模板就是model数据库。例如我在model数据库中新增一个表test,当我随意创建一个新的数据库时会发现这个数据库中已经存在test表了。

(3)msdb数据库,它主要用来存储运行已创建的计划作业时有关的描述信息。它也是非常重要的数据库,一般建议对这个数据库进行备份。另外对于这个数据库有很多限制,再加上有很多进程都使用这个数据库,所以最好不要去对msdb数据库进行修改。

(4)tempdb数据库,这个数据库作为一个过渡数据库来存放一些临时的数据。当SQL Server关闭时这个数据库也就消失了,当SQL Server重启时tempdb会被重建。关于tempdb还要注意不能太随意的创建临时表,否则当表太多时会导致当前任务无法执行,并且整个服务器可能无法工作。

  一个数据库中数据文件和日志文件,对应的后缀名为.mdf和.ldf,以mdf结尾的数据文件为主数据文件。我们还可以为数据库指定辅助数据文件,它以.ndf结尾,一个数据库中只能有一个主数据文件,但可有多个辅助数据文件。为了便于管理和数据的分配,可为文件指定文件组,一个文件不能同时属于多个文件组且不能为日志文件指定文件组。当创建包含多个文件的文件组时,若将表存入文件组,这样查询的时候系统可以并行的去同时查询文件组里的多个文件,这样可以提供查找效率缩短时间。在SQL2008中可管理的最小物理单位是页,一页为8kb也就是8192字节。8张连续的页为一个区,也就是64kb的大小。对于一张表,每一行的数据不可超过一页,每一页中除了存放数据还会存放一些文件基本信息,这样一行数据可占用的最大空间为8060个字节。这个规则有一个特殊情况,那就是列中有nvarchar、varchar的某些文本数据类型可以超过这一限制。下面是关于数据库的sql操作。

create database dbtest
on primary
(
name=test_maindata,
filename='d:\test_maindata.mdf',
size=5,
filegrowth=10%
),
filegroup group1
(
name=test_data1,
filename='d:\test_data1.ndf',
size=2,
filegrowth=10%
),
(
name=test_data2,
filename='d:\test_data2.ndf',
size=2,
filegrowth=10%
)
log on --注意日志文件不能放入文件组
(
name=test_log1,
filename='d:\test_log1.ldf',
size=2,
filegrowth=1MB
),
(
name=test_log2,
filename='d:\test_log2.ldf',
size=2,
filegrowth=2MB
) --查看数据库的基本信息
select * from sys.databases
--查看有关数据库文件的信息
select * from sys.database_files
--查看有关数据库组的信息,这里显示了两行数据,第一行为mdf文件,第二行为group1
select * from sys.filegroups
--查看数据库文件的基本信息和状态信息
select * from sys.master_files
--查看数据库的状态,
select DATABASEPROPERTYEX('dbtest','Status')
--查看空间使用情况
exec sp_spaceused
--查看数据库基本信息,没有sys.databases信息多
exec sp_helpdb --修改数据库的名字,显然这要慎重
alter database dbtest modify name=hahaha
exec sp_renamedb 'hahaha','dbtest' --分离数据库
exec sp_detach_db dbtest
create database dbtest
on
(
name='test_maindata',
filename='D:\test_maindata.mdf'
)
for attach

2.数据库状态

  数据库一共包括7种状态,可以使用查询sys.databases或执行databasepropertyex函数来获得数据库的状态信息。

--这两种方式都可以获得数据库的状态信息
select state_desc,* from sys.databases
select databasepropertyex('testDb','Status')

online:在线状态或联机状态,此时可执行对数据库的访问。

offline:离线状态或脱机状态,数据库不能正常使用。此时可以对处于这种状态的数据库进行移动和复制操作。

restoring:还原状态,数据库不可用,比如正在还原主文件组的文件,或正在脱机还原一个或多个辅助文件。

recovering:恢复状态,数据库不可用,恢复成功后数据库会自动处于在线状态,如果恢复失败那数据库将被标记为可疑状态。

suspect:主文件组可疑或已经损坏,SQL Server启动过程中无法恢复数据库,此时数据库不可用。

recovery pending:   恢复未完成状态,数据库不可用,这说明SQL Server在恢复过程中发生了某些与资源相关的错误,数据库未损坏可能需要某些条件让恢复进程开 始执行。

emergency:主要用来故障排除,当用户设置数据库状态为emergency时此数据库将只读且为单用户模式,禁用日志记录,此时只有sysadmin固定服务器的   角色才能访问,并且也只有sysadmin固定服务器的角色才能设置数据库的状态为emergency。

3.数据类型

  基本数据类型包括数值类型、文本类型、二进制数据类型、日期类型、货币类型等。数值类型分为整型和近似数据类型,整型数据类型有4个,分别是bigint(8字节)、int(4字节)、smallint(2字节)、tinyint(1字节),其中除tinyint外,bigint、int、smallint都可以存储负数,它们使用最高位作为符号位,tinyint不能存储负数,它只能存储0~255的整数。近似数据类型包括decimal、numeric、real、float,decimal和numeric数据类型是完全等价的只是名字不一样而已,decimal用法为decimal(p,s),p表示整数部分的长度s表示小数部分的长度,p的取值范围是0~38,默认是18,s为0~p之间的数值。由于decimal精度跨度大,因此为了更好的利用资源decimal数据类型长度不是固定的,当p小于或等于9时占5个字节,当p为38时所占的字节数将高达17个字节。浮点类型float和real最大的优点是能够存储范围非常大的数字,缺点则是浮点类型容易发生舍入误差,如果需要进行数据很大的科学计算,但对数据的精度要求不是很严格,那么选择float或real是比较不错的选择。float(n)中的n范围是1~53,当n为1~24时,需要4字节存储,n为25~53时需8字节存储。real其实就是float(24),real的数据范围是-3.40E+38~-1.18E-38,0,1.18E-38~3.40E+38,float的数据范围是-1.79E+308~-2.23E-308,0,2.23E-308~1.79E+308。

  文本数据类型有char、varchar、text和nchar、nvarchar、ntext六种数据类型,其中前三个为非Unicode类型,后三个为Unicode类型。char数据类型存储数据时一个字符占用一个字节的存储空间,它最大可存储8000个字符,当真实数据长度小于8000时其余字符为空字符,当真实数据长度大于8000时多余部分将被截断。char是固定类型的,为了更有效率的利用空间,我们可以使用varchar,它与char基本相同唯一的不同就是varchar是可变的。text则是为了解决长度超过8000个字节的文本,它用来存储长度超过8000个字符的可变文本,最大长度可达2的31次方减1。Unicode为每种语言的每一个字符规定了唯一的二进制编码,标准情况下每个字符占2个字节,当然还有其他实现,这就是Unicode Translation Format(Unicode转换格式,UTF)。这样nchar的范围就为0~4000,但要注意nvarchar的长度除了是0~4000外,还可以指定nvarchar(max),它的范围是2的30次方减1,微软建议设计者尽量用nvarchar来代替ntext,因为显然可变的nvarchar比ntext更加节约空间。同样ntext的范围也为2的30次方减1。

  二进制数据类型binary、varbinary、image和文本数据类型一样的模式,也是建议使用varbinary(max)来代替image。货币数据类型由money和smallmoney组成,money由8字节组成,其中4字节存储整数部分,4字节存储小数部分。smallmoney则是2字节+字节一共4字节。money和smallmoney小数部分都只有4位,超出部分将进行四舍五入。另外货币类型是可以在数字前面带¥符号的。对于日期类型,我们使用很多的就是datetime数据类型了,除此之外还有一个smalldatetime数据类型,smalldatetime表示的时间范围比datetime要少且精度低。使用datetime有一个不方便的地方就是它既包括日期数据又包括时间数据,而有时候只需要其中一类。强大的SQL Server里有专门针对日期数据的类型date和专门针对时间数据的类型time。如果需求是datetime类型且希望秒这个单位的小数部分更加精确的话,还可以使用datetime2数据类型,小数部分可达7位。

SQL基础之数据库的更多相关文章

  1. SQL基础之数据库快照

    1.认识快照 如名字一样,数据库快照就可以理解为数据库某一时刻的照片,它记录了此时数据库的数据信息.如果要认识快照的本质,那就要了解快照的工作原理.当我们执行t-sql创建快照后,此时就会创建一个或多 ...

  2. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  3. 数据库学习---SQL基础(二)

    数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) 上篇复习的sql的增删改查,and ,or ,>=, <=,!=等逻辑运算符,还有in ...

  4. 数据库学习---SQL基础(一)

     数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) SQL(struct query language)结构化查询语言:一种专门与数据库通信的语言, ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  7. 珍藏的数据库SQL基础练习题答案

    自己珍藏的数据库SQL基础练习题答案 一,基本表的定义与删除. 题1: 用SQL语句创建如下三张表:学生(Student),课程表(Course),和学生选课表(SC),这三张表的结构如表1-1到表1 ...

  8. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  9. 数据库语言——SQL——基础部分——初篇

    概述 SQL全称为Structured Query Language,是关系型数据库的语言标准,它并不与特定的数据库商品类型有关,例如Mysql,Oracle,DB2等等都可以使用SQL语言,它与特定 ...

随机推荐

  1. shell流程控制&函数

    条件 if-then-elif-then-fi if的条件部分经常使用test EXPRESSION或[ EXPRESSION ]实现,test的用法可以参见test if 条件1 #if 条件1;t ...

  2. php魔术方法罗列

    ##__sleep() 和 __wakeup() 当序列化(serialize)对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep() .__sleep() 方法常用于提交未提交 ...

  3. Android中dip、dp、sp、pt和px的区别

    1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况 ...

  4. 报表引擎API开发入门— EJB程序数据源

    我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用EJB做为数据源.FR通过定义程序数据集使用EJB的相关类获取到EJB数据 ...

  5. 《超级IP》:伪理论,没能比现有的市场营销理论更高明,只敢勉强去解释已经发生的事情,不敢去预测未来。2星。

    超级IP是作者造出来的一个词.作者尝试把“超级IP”作为一种理论来解释2015年以来的各种网红现象.读完全书后,我的感觉是这个理论不怎么样: 1:作者完全不提现有的市场营销理论.我的问题是:现有的理论 ...

  6. NET Core中实现一个Token base的身份认证

    NET Core中实现一个Token base的身份认证 注:本文提到的代码示例下载地址> How to achieve a bearer token authentication and au ...

  7. Pairs Forming LCM(素因子分解)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B    全题在文末. 题意:在a,b中(a,b<=n) ...

  8. MyBatis使用总结+整合Spring

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .20 ...

  9. NOIP2003加分二叉树[树 区间DP]

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...

  10. extra增强延迟加载

    这种配置和配置为lazy=true是一样的,但它的好处在于调用size/contains等方法时,并不查询整个集合的数据,而是发送一条sql语句来处理,只有真正在使用时才全部去查询整个集合