数据库学习

组成数据库的对像!
A:表(table)具体组织和存储数据的对像,由列和行组成.
1:行和列顺序可以是任意的.在同一个表中列名必须是唯一的.
2:在同一个数据库里面表名也必须要是唯一.

B:主键(primary key)
1:表中一列或多列的组合,其值唯一确定表的一行.
2:主键不能重复
3:作为主键各列都不能为空.

C:外键(foreign key)
表中一列或多列的组合,它本身不是本表的主键,而是另外一个表的主键.[一对多关系] 
外键是两个表发生关系一个纽带.

D:视图(view)从一个或几个基本表中根据用户需要而做成一个虚表.
1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据
2:视图只在刚刚打开的一瞬间,通过定义从表中搜集数据,并展现给用户

E:约束(constraint)
对表中各列的取值范围进行限制,以确保表中数据的合理有效.

F:默认值(default)
在向表中插入数据时,为没有指定数据的列提供一个默认的数据

G:事务(constran)
1:在关系型数据库里面一般使用“事务“来处理用户提交的修改表和数据的操作
2:事务就是一次性完成的一组数据的操作.
3:事务的持征:位于事务中的操作要么全部都做,要么全部取消,从而维护了数据库中数据的合理性.
4:关系数据库中一般按照先写日志的方法进行事务操作.即:在实施事务之前先将要进行操作的记录写入日志,再进行实际的数据修改.
5:是记录关系数据修改的情况的笔记.
6:在用户对数据库实施之前,sql会把两种形式的情况写入日志.  
   1:实施事务之间的数据状态.
   2:实施事务之后的数据状态.
当事务由于中途被破坏时,sqlserver会利用日志记录把数据恢复成实施事务之前的数据状态,即撤消事务(回滚);
如果事务顺利的执行则把数据恢复成实施事务之后的状态,即执行事务(前滚).

H:规则(rule)同约束一样,对特定的列进行限制:单价*数量=总额
 
I:索引(index)提供一种无需扫描整张表就能实现对数据快速访问的途径.可以使用索引来优化查询.[用索引可以实现排序]

J:存储过程(store procedure)
   一组经过编译好的可以重复使用的sql代码.存储过程是在服务器中执行,用户可以调用存储过程并接收存储过程返回的结果.
   1:由于存储过程是存储在服务器,所有可以让每一个客户重复使用,减少sql代码书写量.
   2:由于存储过程是事先编译好的sql代码,所以在执行时,并不做语法检验,可以大大提高sql语句的执行效率.

K:触发器(trigger)
  一种特殊的存储过程.
  1:触发器与表相关.
  2:当用户对指定的表进行某种操作时,触发器会自动执行,去做它里面sql代码

L:数据类型(data type)
  两种类型:系统数据类型,用户自定义数据类型.
  系统数据类型:int,float,char,varchar,text[备注,工作简历],image[存储图像]

M:日志(log)
  sql server使用日志记载用户对数据库进行的一系列的操作.日志是维护数据库完整性的重要工具.sql server遵守先写日志再对数据库进行操作.所以某一天,如果数据库损坏,但可以通过日志进行恢复.
SQL系统组成
1:sql server系统数据库.
 
A:master:最重要的一个数据库.保存了:
     服务器的用户名密码.
     服务器的配置信息
     使用的数据类型
     错误信息
     系统或者用户建立的所有对像
   说明:由于master数据库比较重要所以不要在里面建表,不要修改里面的任何内容. 
  
  B:tempdb:临时数据库
    1:记录所有的临时表格或者数据.
    2:tempdb是一个全局资源,任何连接到sql server都可以使用.
    3:该数据库所放有的数据全部是临时,这就是说当sql server服务停止之后,所有数据将会消失

  C:model数据库:模板数据库.
    1:是建立新的数据库一个样式.
    2:当用户建立一个数据库的时候,首先要从model数据库里面复制所有的表.

  D:msdb数据库:  
    主要被sql server agent服务用于操作作业调度以及管理报警.
   
创建和维护数据库(上)
A:数据库的逻辑结构:
通常我们在企业管理器中看到的数据库和里面的对像都只是数据库的逻辑结构.也就是它们并不像在企业管理器中所看到的那样的结构去存储在计算机中.企业管理器只是为了方便用户查看数据和操作数据而在前台表象上作了一个“虚假”的显示结构即为数据库的逻辑结构.而数据库中真正的数据是存储在硬盘中.而且是以文件的形式来保存的.于是有了数据库的物理结构.

B:数据库的物理结构:
既然数据库里面的所有数据是以文件的形式存储在硬盘中,那么究竟一个数据库库由那样文件组成呢?组成一个数据库的文件由以下三种文件组成:
1:主要数据文件:
  作用:主要数据文件包含数据库的初始信息.记录数据库还拥有那些文件,并且用来存储数据.如用户建的表等数据.
  特点:每一个数据库有且只有一个主要数据文件.扩展名为 mdf
2:次要数据文件:
  作用:次要文件也是用来存储数据库中的各类信息的,用户可以选择是否需要次要数据文件.也就是说它是可选的,它的扩展名为 ndf
  为什么要引入次要数据文件:
    1:或许你的主要文件的数据非常庞大,以至于超过所在的硬盘分区.如果没有次要数据文件帮助则用户添加的数据将不能加入到数据库里面去.
    2:可以为一个数据库创建多个次要文件,并把这些文件放到不同的硬盘中,既可将一个数据库中的数据存储在多个不同的物理硬盘中.[可以提高查询效率:以下再作解释]
    3:日志文件:我们知道由于关系型数据库遵循“先写日志再操作”的原则,所以必须有一个文件来存储用户对该数据库所作的一切操作的笔记的文件,这就是日志文件.扩展名为:ldf.说明:一个数据库必须至少有一个日志文件,也可以有多个日志文件.

所有数据库基本上由这个三类文件组成.另外补充一点:当你创建数据库并指定一个数据文件或日志文件时,系统会让你输入两种表示形式的文件名:一个是不带路径的文件名,一个是要带路径的文件.它们分别是:逻辑文件名,物理文件名
  1:逻辑文件名:用于在sql语句命令中对该文件进行访问,即不需要指明路径.
  2:物理文件名:是文件实际存储在磁盘上的文件名,必须包括路径,指明该文件在磁盘中的什么位置.
总结:逻辑文件名与物理文件名就像一个房主与房子地址一样,我们用房子的主人就可以代表房子本身即:房子的地址.

文件组
文件组:如果一个数据库有很多文件就不便于管理了,为了管理和分配的目的,sql server允许你将多个文件归纳为同一个组.这样文件组中的文件就和其它文件组中的文件没有直接关系.这就是文件组.
说明:
   1:一个数据库里面必须有且仅有一个主文件组为:primary filegroup.用户可以根据需要来定义其它文件组.
   2:一个文件只能属于一个文件组,它不能同时属于两个文件组.
   3:文件组只能够管理数据文件,也就是日志文件不能放入文件组,因为日志文件是分开管理的
   4:所有建的次要数据文件如果不特别指定组则自动被放入primary组.

sql server对文件组中的每个文件的填充策略:
如果用户有数据要写入文件组时(比如用户建一个表,并指定它属于的文件组时,之后用户对该表加入记录)sql server会采用“按比例填充”的原则:即以属于该组每个文件的可用空间比例来将数据分割并分别写入每一个文件中.而不是先写入第一个文件,第一个文件写满之后再写第二文件.但是sql server对日志文件的数据分配是采用“写满为止“的策略.

为什么要引入文件组:
理由:
1)用户可以在一个数据库里面建多个数据文件并指定它们的“物理名”为不同的磁盘,然后再把它们放入一个组中.这样当用户在这个组中创建一个表时这个表中的数据将按“比例填充”方式放入该组中所有的数据文件中,这样就可以实现把一个表中的数据放入多个磁盘,即可以实现数据库的“广域”存储.此时如果要对该表进行查询,则多个磁盘的读写磁头将能够同时并行的访问数据,从而加快数据库的操作.
2)通过为某些数据容量很大且经常需要使用的表直接存储在一个特定的高速的磁盘上,而把一些不经常使用且容量较小的表存储另一个磁盘上,就能提供工作效率.

怎样使用文件组:
  1:大多数的数据库只需要一个主要数据文件和一个日志文件就中以非常好的运行.
  2:如果在创建数据库之前估计某个对像(如表)以后会占用大量数据则在数据库创建时,在多个磁盘分别建立一个数据文件,然后把它们设为属于同一个组.然后把该对像放于该组,则因为多个磁盘能并行操作而加快操作速度.
  3:如果某些表经常要执行“连接查询”且容量很大,则应该把这些表分别存储在不同的文件组中,如此一来因为能对被连接的数据实施并行磁盘搜索而提高效率.

C:如何创建数据库:
  1:通过企业管理器:
  2:sql语句:
     格式:create database 数据库名
          on

          primary
         (
          name=/'数据文件1的逻辑文件名/',
          filename=/'数据文件1的物理文件名/',
          size=大小,
          maxsize=大小,
          filegrowth=大小
         ),
         (
&nbs

p;         name=/'数据文件2的逻辑文件名/',
          filename=/'数据文件2的物理文件名/',
          size=大小,
          maxsize=大小,
          filegrowth=大小
         ),
          ............

          filegroup 用户自定义文件组名
         (
          name=/'数据文件1的逻辑文件名/',
          filename=/'数据文件1的物理文件名/',
          size=大小,
          maxsize=大小,
          filegrowth=大小
         ),
        (
          name=/'数据文件2的逻辑文件名/',
          filename=/'数据文件2的物理文件名/',
          size=大小,
          maxsize=大小,
          filegrowth=大小
         ),

          log on
         (
          name=/'日志文件1的逻辑文件名/',
          filename=/'数据文件1的物理文件名/',
          size=大小,
          maxsize=大小,
          filegrowth=大小
         )

说明:
1:数据文件名之间不能同名,数据文件名与日志文件名也不能同名.
2:在给一个组加上文件时,每个文件之间用“逗号”隔开.
3:数据文件与日志文件的分界时不要加逗号.
4:由于日志文件不能放入任何组,所以不要为日志文件设定组.
5:如果不指明组则添加的数据文件都自动放入primary组.
6:必须有一个主数据文件.
7:如果数据文件还有较大的空间但是日志文件的空间已占满则对数据进行的所有更新操作将都因无法写入日志而终止.
注意:数据文件和文件组绝对不能与日志文件存储在相同的磁盘上.

D:如何删除数据库:
   1:通过企业管理器:
   2:sql语句:
    格式:drop database 数据库名
    说明:
      1:数据库删除后,数据库里面的数据文件与日志文件就会被删除,系统数据库master关于该数据库的信息也被删除了.
      2:建议在删除数据库之后立即备份master数据库.否则你在删除了一个数据库之后而后却因为某种原因还原了过去所备份的master数据库,则会出错.
      3:master,model,msdb,tempdb这四个数据库不能删除.
      4:如果数据库正在被使用则不能删除.
      5:如何修改数据库:
      6:快速查看数据库的内容:
      7:附加和分离数据库:
      8:生成数据库的sql脚本:
      9:数据库复制向导:

E:如何修改数据库
1:更改数据库的名字:sp_renamedb 旧名,新名
  说明:修改数据库的名字一定要小心,因为客户端应用程序都是以原先的名字来访问的.
       必须确认没以任何人连接以数据库中才可以更名.

2:扩充分配给数据库的数据文件或日志文件的空间:
  你在创建数据时,可以设置数据库文件的自动增长空间,事实上除了让sql server自动去扩充之外,还可以人工的方式来扩展数据库,还可以为已经创立的数据库增加新的文件.
   方法:企业管理器:数据库,属性
   说明:在给已经存在数据文件重新分配大小时,分配的大小不能比原来的小.

3:收缩分配给数据库的数据文件或日志文件.
  当你觉得你的数据库的初始值设定过于大,或者增长方式设置不符合你的业务,以致使数据库产生多余空间时,就可以收缩数据库了.
方法:企业管理器  “收缩数据库”
说明:1:收缩后文件的最大可用空间:可以指定一个数值来决定收缩后文件的可用空间,数值越大,收缩越小,反之收缩越大.
     2:在收缩前将移动页文件起始位置:在收缩之前会把位于页里面的数据集中到文件开头从而得到更多的可用空间,但由于要做移动数据等动作,则会花费较多的时间.
     3:调度:可以让sql server定期来收缩数据库,从而实现自动化管理.
     4:压缩页然后截断文件中的可用页:收缩数据页,然后将收缩页产生的可用空间删除.
     5:从文件结尾处截断可用空间.
   6:清空文件:清空数据文件或日志文件而该文件中的数据迁移到文件组中的其他文件中.
     7:收缩文件至:将选定的文件收缩到特定的大小.
     8:在一段时间之后收缩:到了某一时间之后再收缩.[预定义]
思考:能不能通过删除数据文件或日志文件的方法来收缩数据库.

4:添加或删除数据文件和事务日志:
   你可以添加数据文件或事务日志文件来扩充数据库的大小,也可以通过删除数据文件和事务日志文件来收缩数据库.下面着重来讲解数据库文件的删除:
     1:对于数据文件的写入方式是“按比例”写入,所以如果用户要建一个表则该表所属的文件组中的任何一个数据文件都将或多或小的写入数据.                     
     2:而日志文件的写入方式是“写满为止”的策略来写入,即只有当第一个日志文件写满了之后才去写下一个日志,这就是说如果你为一个数据库建多个日志文件,有可能有些日志文件是空的.
     3:要删除数据库文件必须保证数据库文件里面没有任何数据.
     4:要得到删除数据库文件必须首先将它里面的数据迁移动同一个文件组中的其它文件里面去.
         格式:dbcc shrinkfile (数据文件名,emptyfile)
     5:方法:数据库====属性:

5:更改数据库的所有者:
  1:什么是所有者:数据库的创建都就是数据库的所有者(dbo)
  2:数据库所有者和sa对该数据库有任何操作权限.
  3:数据库所有者与sa的区别在于sa是全局的,而数据库所有者是局部的.
  4:格式:sp_changedbowner 登录用户名
    说明:1:只能够更改当前数据库的dbo
         2:如果指定的登录名已经是当前数据库的用户,则不能更改
6:更改数据库的配置:
  A:仅仅供数据库拥有者或者sa能够使用:
     用途:当你作为一名数据库管理员需要改变表的结构时,你不希望别的用户来使用该表,可以把此项设置,当你把表的结构改了之后再把它改回来.
     sql语句:sp_dboption /'数据库名/',/'dbo use only/',/'true/'[false]
  B:单用户:同一时间只能够有一位用户连接到数据库来访问它:
     用途:更改数据库名称,还原数据库的时候.
            sp-dboption /'数据库名/',/'single user/',/'true/'[false]
  C:只读:使数据库只读.
            sp-dboption /'数据库名/',/'read only/',/'true/'[false]

F:快速查看数据库的内容
    1:企业管理器:任务板:
           A:常规:给出关于数据库一些详细资料.
           B:表:查看数据库中各个表的详细资料.
           C:向导:很方便的打开向导和工具来完成操作.
    2:sql语句:
           A:sp_helpdb 数据库名[指定数据库的详细资料,包括各数据库文件]
           B:sp_helpdb [当前服务器中所有数据库的详细资料,不包括数据库文件]
           C:sp_databases[显示当前服务器所有可以使用的数据库]
           D:sp_helpfile [查看当前数据库的所有文件的资料]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值