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语言,它与特定 ...
随机推荐
- Javascript 优化项目代码技巧之语言基础(二)
上一篇随笔介绍了如何正确判断对象类型.避免变量污染,特殊值(null.undefined.NaN)的使用,以及其他Javascript中常用关键字与方法的优化,这篇随笔将着重介绍Javascr ...
- Java集合分组
public class Data { private Long id ; private Long courseId ; private String content ; public Long g ...
- SQL Server:统计数据库中每张表的大小
1. 统计数据库中每张表的大小 1.1 首先执行下面的命令 exec sp_MSforeachtable @command1="sp_spaceused '?'"; 1.2 检测当 ...
- hadoop2.6分布式部署时 livenodes等于1的原因
1.问题描述 在进行hadoop2.x版本的hdfs分布式部署时,遇到了一个奇怪的问题: 使用start-dfs.sh命令启动dfs之后,所有的datanode节点上均能看到datanode进程,然而 ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- VMworld 2015 感受:VMware “Ready For Any”
今年有机会参加在旧金山举行的 VMworld 2015.今天是正式开始的第一天.争取每天写一篇文章分享所见所听所感.第一天的主要活动,包括上午的 General Session,由 VMware 的几 ...
- 150923-碎觉要-PHP,Linux
今天懒懒的,还是每天都懒懒的. 早上下午都没有更.还好还有晚上更的想法和行动. 总结如下 1.PHP --wamp的一点配置问题,把根文件改为自己所要的文件夹.改动Apache的配置文件以及更改wam ...
- 大一上学期的一点小疑惑,代码验证ok
#include<iostream> using namespace std; class test { int *p; int pn; public: test(int n) { p = ...
- 单机搭建Android开发环境(四)
单机搭建安卓开发环境,前三篇主要是磨刀霍霍,这一篇将重点介绍JDK.REPO.GIT及编译工具的安装,下载项目代码并编译.特别说明,以下操作基于64位12.04 Server版Ubuntu.若采用其他 ...
- js中的冒泡排序以及实现一个数组中得最到最大的数字小例
这其实是一个很简单的js就可以实现,当然一般情况就是利用for循环,从第一个跟第二个开始比较,根据大小交互位置,思路很简单. 也就是js中的冒泡排序 冒泡排序 时间复杂度为O(n^2),有两个优点: ...