数据库知识点总结(1)

来源:互联网 发布:oracle默认数据库 编辑:程序博客网 时间:2024/05/16 19:40

1、存储过程

     1.1什么是存储过程?--存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。   

    1.2存储过程优点?

         1.2.1存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。

         1.2.2可保证数据的安全性和完整性。通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。

         1.2.3可以降低网络的通信量。存储过程主要是在服务器上运行,减少对客户机的压力。

         1.2.4存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因

         1.2.5存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。

  1.3存储过程和函数的区别

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程。

函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。


2、事务

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

     事务的4个属性ACID:
     原子性。即不可分割性,事务要么全部被执行,要么就全部不被执行。

     一致性。事务的执行使得数据库从一种正确状态转换成另一种正确状态。
     隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。

    持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

   一般情况下,通过执行commit和rollback语句来终止事务。


3、锁:共享锁、互斥锁

         在所有的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。

        共享锁简称S锁,或者读锁。用于不更改或者不更新数据的操作(只读操作),事务T对数据A加了S锁,其他的事务只能对其加S锁。

        互斥锁简称X锁,或者排他锁。用于数据修改操作,如insert,updata或delete。确保不会同时对同一资源进行多重更新,对数据加X锁,在加X锁期间,只有一个线程访问对象。若事务T对数据D加X锁,则其他任何事务都不可以在对D加任何类型的锁,直到事务T释放D上的X锁。
        两段锁协议:阶段1:加锁阶段(先锁后操作)阶段2:解锁阶段(事务结束之后必须解锁)


4、死锁

     4.1产生死锁的必要条件(四个条件在死锁时会同时发生)

           4.1.1互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等.

          4.1.2不可抢占条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。

          4.1.3占有且申请条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。

         4.1.4循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。

4.2死锁的预防

        一般地,解决死锁的方法分为死锁的预防,避免,检测与恢复三种(注意:死锁的检测与恢复是一个方法)。死锁的预防是保证系统不进入死锁状态的一种策略。它的基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态。

    4.2.1打破互斥条件。即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,像打印机等等,这是由资源本身的属性所决定的。所以,这种办法并无实用价值。

    4.2.2打破不可抢占条件。即允许进程强行从占有者那里夺取某些资源。就是说,当一个进程已占有了某些资源,它又申请新的资源,但不能立即被满足时,它必须释放所占有的全部资源,以后再重新申请。它所释放的资源可以分配给其它进程。这就相当于该进程占有的资源被隐蔽地强占了。这种预防死锁的方法实现起来困难,会降低系统性能。   

    4.2.3打破占有且申请条件。可以实行资源预先分配策略。即进程在运行前一次性地向系统申请它所需要的全部资源。如果某个进程所需的全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。但是,这种策略也有如下缺点:

    (1)在许多情况下,一个进程在执行之前不可能知道它所需要的全部资源。这是由于进程在执行时是动态的,不可预测的;

    (2)资源利用率低。无论所分资源何时用到,一个进程只有在占有所需的全部资源后才能执行。即使有些资源最后才被该进程用到一次,但该进程在生存期间却一直占有它们,造成长期占着不用的状况。这显然是一种极大的资源浪费;

    (3)降低了进程的并发性。因为资源有限,又加上存在浪费,能分配到所需全部资源的进程个数就必然少了。   

   (4)打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。这种策略与前面的策略相比,资源的利用率和系统吞吐量都有很大提高,但是也存在以下缺点:
        (1)限制了进程对资源的请求,同时给系统中所有资源合理编号也是件困难事,并增加了系统开销;
        (2)为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源的占用时间。


未完结


0 0
原创粉丝点击