欢迎来到数据时代

来源:互联网 发布:快乐垂钓淘宝天猫店 编辑:程序博客网 时间:2024/04/30 14:50

1、基本的概念


(1)事务(是一系列的数据库操作,是数据库应用的基本逻辑单位
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
事务四大特征(ACID)
原子性(Atomicity)

    一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。

一致性(Consistency)

    一致性代表了底层数据存储的完整性。它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑不会导致数据的不一致(即,数据预期所表达的现实业务情况不相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须与另一账户中存入的金额相等。

隔离性(Isolation)

    隔离性意味着事务必须在不干扰其他进程或事务的前提下独立执行。换言之,在事务或工作单元执行完毕之前,其所访问的数据不能受系统其他部分的影响。

持久性(Durability)

    持久性表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。这样可以保证,所作的修改在任何系统瘫痪时不至于丢失。

基本的SQL语句

事务详解:数据库事务

(2)视图从基本表中导出虚拟表) 

CREATE VIEW <视图名>[(列名组)]
AS <子查询>

作用优点:

简单性 : 简化了表与表之间的关系看起来更加直观,也简化了用户的操作

安全性:通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到,通过视图用户的权限可以被限制在数据库特定的行或特定的列上
逻辑数据独立性:视图可帮助用户屏蔽真实表结构变化带来的影响,数据表和程序一方发生变化是另一方都不用做修改,只需要修改视图即可

详细解析: 数据库中视图的作用


(3)存储过程(一系列编译好了的SQL语句,存储在数据库,可以反复被调用)


CREATE PROC 存储过程名称
    [参数列表(多个以“,”分隔)]
AS
SQL 语句

作用优点:

  因为已经编译好了所以运行速度快

  因为运行在服务器端所以客户端压力和网络通信量

  因为没有权限的用户通过存储过程间接操作数据库所以能够保障数据库的安全性

  因为存储过程能够使相关的动作一起发生所以能够保证数据的完整性

  存储过程可以接受参数、输出参数、返回结果集和返回值还可以返回错误原因

详细介绍:数据库存储过程实例介绍

(4)触发器(类似于存储过程,当满足触发条件时,系统自动执行触发体)

常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。

  after(for)        表示执行代码后,执行触发器

  instead of        表示执行代码前,用已经写好的触发器代替你的操作

触发器语法:

  create trigger 触发器的名字   on 操作表

  for|after         instead of

  update|insert|delete

  as

  SQL语句

实例讲解:浅谈数据库中的触发器


(5)内外左右连接

内连接:只把满足条件的元组筛选出来

<pre name="code" class="sql"><span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;">隐式内连接:select s.name,m.mark from student s inner join mark m on s.id=m.studentid</span></span>
<pre name="code" class="sql"><span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;"></span></span><pre name="code" class="html"><span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;">显示的内连接:select s.name,m.mark from student s,mark m where s.id=m.studentid</span></span>

外连接

    左连接:把左边表格的全部元组都筛选出来,不管左边的表格是否有匹配的数据

<span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;">select s.name,m.mark from student s left join mark m on s.id=m.studentid</span></span>

  右连接:把右边表格的元组全部筛选出来,不管右边的表格是否有匹配的数据

<pre name="code" class="sql"><span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;">select s.name,m.mark from student s right join mark m on s.id=m.studentid</span></span>

  全连接:把两边表格的数据全部筛选出来不管是否有匹配数据

<span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;">select s.name,m.mark from student s full join mark m on s.id=m.studentid</span></span>

详细实例:SQL表连接查询


(6)索引

优点:适当的使用索引可以提高检索速度,oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引。

唯一性索:引保证在索引列中的全部数据是唯一的,不会包含冗余数据。如果表中已经有一个主键约束或者唯一性键约束,那么当创建表或者修改表时,SQL Server自动创建一个唯一性索引。

复合索引:就是一个索引创建在两个列或者多个列上。在搜索时,当两个或者多个列作为一个关键值时,最好在这些列上创建复合索引。

创建唯一索引: 
CREATE unique INDEX 索引名 ON 表名 (列名) 
     TABLESPACE 表空间名; 

创建组合索引: 
CREATE INDEX 索引名 ON 表名 (列名1,列名2) 
     TABLESPACE 表空间名; 
什么情况下不建或少建索引?

表记录太少

在查询是先查索引表,如果表中的数据少就没必要再建一个索引表
经常插入、修改或删除的表(经常处理业务的表应该尽量减少索引)

数据重复且分布平均的表字段(性别:男、女)假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度

一个简单的索引实例:数据库索引实例

索引详解:数据库索引的作用和优点缺点  


(7)锁

为什么加锁:数据库是一种多用户共享的资源,当多个用户并发的操作同一组数据时就会产生混乱,这就需要对操作进行控制,数据库的锁机制就是针对该情况的。加锁是实现数据库并发控制的重要技术,当事务对都某个数据对象进行操作前,先向系统申请对其加锁,这样别的用户就不能对其进行操作了,保证了数据的完整性。

锁的分类:

排它锁(Exclusive locks,即X锁)和共享锁(Share locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。
根据保护的对象不同,Oracle数据库锁可以分为以下几大类:dml锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;在我们实际应用开发中涉及较多的是dml锁,其他两种的话dba会更加关心点;dml锁的目的在于保证并发情况下的数据完整性,主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。
两段锁协议:数据库的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁
两段锁协议与防止死锁的一次封锁法的区别:
一次封锁法要求事务必须一次对所有要使用到的数据项进行加锁,否则不能继续运行。
显然,一次封锁法符合两段锁协议,但是两段锁协议并不要求一次就要对所有需要用到的数据项进行加锁,因此遵守两段锁协议的事务有可能死锁
死锁:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。死锁详解:数据库死锁问题

(8)完整性约束

完整性的定义:是为保证数据库中数据的正确性和一致性。

分类: 域完整性,实体完整性、参照完整性和用户定义完整性。

    1.实体完整性   指关系的主关键字不为空且不重复     
              primary key  主键
    2.域完整性 保证表中数据的合理性  
              check     检查
              default   默认
              not null  不为空
              unique    唯一约束
    3.参照完整性   指建立两个关系建立联系的主外键的约束
             foreign key  外键
    4.用户自定义完整性 除了上述关键字,可以使用触发器来编写约束

示例1 :实体完整性 域完整性

创建一个学生信息表stu_info,学号stuid为主键,姓名name不为空,性别sex只能为男或女,年龄age在6岁到34之间,家庭地loc址默认为‘山东’,

<span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;">create table student_info(       stuid   number primary key,                 --只将stuid设为主键,实体完整性       name    varchar(30) not null,               --学生姓名不可以为空,域完整性       sex     char(2) check(sex in( '男','女')),       age     number(2) check(age between 6 and 34),       loc     varchar(30) default '山东'     );</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-weight: normal;"></span></span><h1 style="margin: 0px; padding: 0px; word-break: break-all; position: relative;"><span style="font-size:14px;"><span style="font-weight: normal;">示例</span><span style="font-weight: normal;">2,</span><span style="font-weight: normal;">参照完整性 </span></span></h1>

成绩表score_info   编号 sno  学号stuid,科目 course,分数 score

<span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:14px;"> create table score_info(   sno number primary key,   stuid number,   course varchar(20),   score number,   constraint fk_stuid  foreign key(stuid)  references stu(stuid)  --设为外键,关联stu_info(stuid)参照完整性   );</span></span>
完整性约束详解:oracle 完整性约束


(9)范式

1 第一范式(1NF)

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

简而言之,第一范式就是无重复的列。

2 第二范式(2NF)

先满足1NF,第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。、

简而言之,第二范式就是非主属性非部分依赖于主关键字。

3 第三范式(3NF)

满足第三范式(3NF)必须先满足第二范式(2NF)。

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。

简而言之,第三范式就是属性不依赖于其它非主属性。

应用详解:数据库三大范式详解


2、常用语法


0 0
原创粉丝点击