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位。

时间: 2024-10-09 22:52:08

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

SQL基础之数据库快照

1.认识快照 如名字一样,数据库快照就可以理解为数据库某一时刻的照片,它记录了此时数据库的数据信息.如果要认识快照的本质,那就要了解快照的工作原理.当我们执行t-sql创建快照后,此时就会创建一个或多个稀疏文件.稀疏文件的个数与数据库数据文件的个数相等且一定要相等,否则会报错.此时,稀疏文件只是一个空文件并没有在磁盘上分配空间存储用户数据,如果数据库没有任何更新那快照也将一直是空文件.快照唯一的一次写数据,仅发生在第一次更新数据库的数据页,这时快照会将数据页中的数据复制到快照中并在磁盘上真真的分

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

SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 序 目录 What's 数据库 数据库结构 SQL 概要 创建表 删除和更新表 1-1 What's 数据库 1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.如:大型-银行存储的信息,小型-电话簿. 2.数据库管理系统(Batabase Management Syste

数据库复习2——SQL基础

数据库复习 CH4 SQL SQL(Structured Query Language,结构化查询语言)是通用的关系数据库系统操作语言,下面从几个方面来复习SQL基础 4.1 DDL SQL语句可根据其操作性质分成三类: DDL(Data Definition Language) DCL(Data Constraint Language) DML(Data Manipulation Language) DCL完成完整性和安全性的约束,也可以看作从属于DDL,下面介绍DCL除外的DDL部分SQL语

Oracle数据库之SQL基础和分支循环

一.SQL基础语言 DECLARE --声明 a varchar2(10); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbms_output.put_line() END; 二.分支 DECLARE --声明 A NUMBER(10); B NUMBER(10); BEGIN A := 2; B := 3; IF A < B THEN DBMS_OUTPUT.PUT_LINE('a小于b'); EL

Oracle实践--PL/SQL基础之同义词和序列

PL/SQL基础入门之同义词和序列             PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 同义词: /*     同义词:现有对象的一个别名:    

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

mysql基础篇 - 数据库及表的修改和删除

基础篇 - 数据库及表的修改和删除 修改和删除 一.实验简介 本节实验中,我们将学习并实践如何对数据库的内容做修改,删除,重命名等操作. 二.实验准备 在正式开始本实验内容之前,需要先下载相关代码. 该代码可以新建两个数据库,分别名为 test_01 和mysql_shiyan ,并在 mysql_shiyan 数据库中建 4 个表(department,employee,project,table_1),然后向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/De

SQL基础整理

SQL 是用于访问和处理数据库的标准的计算机语言. 什么是 SQL? SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语言 编者注:ANSI,美国国家标准化组织  SQL 能做什么? SQL 面向数据库执行查询 SQL 可从数据库取回数据 SQL 可在数据库中插入新的记录 SQL 可更新数据库中的数据 SQL 可从数据库删除记录 SQL 可创建新数据库 SQL 可在数据库中创建新表 SQL 可在数据库中创建存储过程 SQL 可在数据库中创建视图 S

零基础mysql数据库表迁移

@ 把老数据库中的某个表倒出成sql文件 $mysql -uroot -p my_db > my_db.sql (输入密码) @ 在新环境中导入 $sudo apt-get install mysql-server -y (期间要初始化root用户的密码) $mysql -uroot -p (输入密码) mysql> show databases;(注意分号) mysql> create database my_db; mysql> show databases; mysql>