SQL基础之数据库
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基础之数据库的更多相关文章
- SQL基础之数据库快照
1.认识快照 如名字一样,数据库快照就可以理解为数据库某一时刻的照片,它记录了此时数据库的数据信息.如果要认识快照的本质,那就要了解快照的工作原理.当我们执行t-sql创建快照后,此时就会创建一个或多 ...
- 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 ...
- 数据库学习---SQL基础(二)
数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) 上篇复习的sql的增删改查,and ,or ,>=, <=,!=等逻辑运算符,还有in ...
- 数据库学习---SQL基础(一)
数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) SQL(struct query language)结构化查询语言:一种专门与数据库通信的语言, ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- 珍藏的数据库SQL基础练习题答案
自己珍藏的数据库SQL基础练习题答案 一,基本表的定义与删除. 题1: 用SQL语句创建如下三张表:学生(Student),课程表(Course),和学生选课表(SC),这三张表的结构如表1-1到表1 ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- 数据库语言——SQL——基础部分——初篇
概述 SQL全称为Structured Query Language,是关系型数据库的语言标准,它并不与特定的数据库商品类型有关,例如Mysql,Oracle,DB2等等都可以使用SQL语言,它与特定 ...
随机推荐
- 《CLR via C#》读书笔记--基元类型、引用类型和值类型
编程语言的基元类型 编译器直接支持的数据类型称为基元类型.基元类型直接映射到Framework类库中存在的类型.例如:C#中的int直接映射到System.Int32类型.下表给出了C#基元类型与对应 ...
- 使用eclipse查看源码的方法
打开eclipse,建立项目:Test,将struts2相关jar包导入到其中.在Package Explorer标签栏下操作. 如下图: 在此,以查阅struts2中,struts2-core-2. ...
- hadoop2.6分布式部署时 livenodes等于1的原因
1.问题描述 在进行hadoop2.x版本的hdfs分布式部署时,遇到了一个奇怪的问题: 使用start-dfs.sh命令启动dfs之后,所有的datanode节点上均能看到datanode进程,然而 ...
- Linux笔试常见填空题
一.填空题: 在Linux系统中,以 文件 方式访问设备 . Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. Linux文件系统中每个文件用 i节点 来标识. 全部磁盘块 ...
- Struts2文件上传,以及各种注意事项
首先肯定是要配置好struts2环境,这个在另一篇<struts2环境搭建,以及一个简单实例>里已经讲过了 首先是网页部分,upload_file.jsp <%@ page lang ...
- Centos下mysql数据库备份与恢复的方法
一.mysqldump工具备份 mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具.支持基于InnoDB的热备份.但由于是逻辑备份,所以速度不是很快,适合备份 ...
- [书目20160526]Brain Rules 让大脑自由:释放天赋的12条定律
推荐序1 12条定律,让大脑更聪明推荐序2 走过迷雾地带前 言 人人都有一个不可思议的大脑 定律1:越运动,大脑越聪明 信不信,“驴友”比“沙发土豆”更聪明! 老板,请把办公室的咖啡机换成跑步机! ...
- MMORPG大型游戏设计与开发(客户端架构 part12 of vegine)
在游戏中的交互过程中输入是一个必不可少的过程,比如登陆的时候需要用户输入用户名与密码,就算是单机游戏很多时候也要求用户输入一个用户名作为存档的依据.网络游戏中没有了输入,只用鼠标来交互是不切实际的,因 ...
- MMORPG大型游戏设计与开发(part1 of net)
网络模块的设计,是大型多人在线游戏中比较重要的一部分.我之所以将网络模块放到最前面,是因为许许多多的开发者面对这一块的时候充满了疑惑,而且也觉得很神秘和深奥.这些我们面对到的困难,其实是由于我们对这方 ...
- PHP之图像处理
PHP中提供了一些对图像进行编辑处理的函数,其中最为典型的应用为随机图形验证码.图片水印以及数据统计中饼状图和柱状图的生成等 PHP中有的图形函数可以直接使用,但多数需要在安装了GD2函数库后才能使用 ...