
存储过程也可以看成是函数的一种, 而且存储过程中的过程如果放到了开发 系统的 D 层的时候执行效果也是相同的。 存储过程是存储在数据库中的一个程序 块, 里面包含了自己定义的一段程序来实现相应的功能,比如要选择数据库的表 里面的记录,就可以使用下面的存储过程的框架:
这个实现的过程比较简单, 就是利用的是数据库自带的存储过程的模版,新 建存储过
程的时候就可以非常方便的实现自己所需要的功能。 存储过程中使用的 是数据库的语言, 跟其他的高级语言的用法相似,熟练的使用数据库的语言可以 加快开发的效率,技术也是很厉害的。 存储过程的到底有什么好处呢?一定要用存储过程吗? 存储过程的优点: 1存储过程只在创造时进行编译,以后每次执行存储过 程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过 程可提高数据库执行速度。 2当对数据库进行复杂 *** 作时,可将此复杂 *** 作用 存储过程封装起来与数据库提供的事务处理结合一起使用。更多数据库的知识, 尽在南京宝云官网。 3存储过程可以重复使用,可减少数据库开发人员的工作量 4安全性高,可设定只有某此用户才具有对指定存储过程的使用权。 存储过程有利于实现一系列的 *** 作简化,提高系统的执行效率,而且放在存 储过程中的 SQL 语句是直接在数据库中编译过了的, 系统在执行的时候就可以减 少这部分代码的资源开销。 但是对于机房重构中,有时候我们只需要更新一个记录中的某一个字段的值, 这个时候用存储过程就有点不划算了,这个时候系统如 果不用存储过程直接用 SQL 语句来说,是比较方便的。所以存储过程并不是所有 的地方用都好,凡事都有一个合适的问题,一个度的问题。 可能有的人想存储过程这么有用,而且对系统的性能有提升,那就强迫症的 都去使用存储过程。 这里又有一个问题了,存储过程的作用主要是对数据库进行 *** 作, 那么学过数据库系统原理的我们就需要注意一个问题了,如何防止死锁? 毫无节制的使用存储过程, 而不考虑数据库结构是不科学的。对于相同的表进行 不同的 *** 作,所产生的结果也是不一样的,产生的顺序也是不一样的,如何在存 储过程中进行有效的 *** 作来使系统健康强壮,这是需要注意的。 通过使用存储过程, 可以更加清晰的理解数据库和系统是如何相互关联工作 的,存储过程的使用不仅是一种技术上的提升,更是思想上的一种启发,在今后 的开发工作中是否有相同的地方需要这样的抽象封装呢。 面对更多的重复出现的 封装,我们的工作也将更加高效、简洁。
对于MySQL数据库,备份与恢复相关的术语包括:备份(backup)、还原(restore)、恢复(recover)、二进制日志(binlog),其中备份按照其特性可以分为:物理备份和逻辑备份;冷备、温备和热备;完全备份和不完全备份等;常用的备份工具包括: *** 作系统拷贝、mysqldump等;还原包括物理备份的还原和逻辑备份的还原;下面分别加以介绍和说明。
数据库备份通俗地说是将数据库的某一时刻的数据复制了一份;数据库还原是将备份出的数据替换掉原来数据库中的数据文件,将备份放回到原来数据库文件的目录位置;二进制日志(BINLOG)记录数据库的变更过程,例如创建数据库、建表、修改表等DDL *** 作、以及数据表的相关DML *** 作,这些 *** 作会导致数据库产生变化,开启binlog以后导致数据库产生变化的 *** 作会按照时间顺序以“事件”的形式记录到binlog二进制文件中。
参考上图,在凌晨2:00,管理员将已开启二进制日志的数据库的数据做了一个完整的备份,随着时间的推移,仍然有用户对数据库进行相关的写 *** 作(包括:DDL语句、DML语句中的增删改 *** 作、DCL授权语句和TCL事务处理语句等),导致了二进制日志文件写满(默认1G)后自动切换;在上午9:37时,由于硬盘出现故障,数据库用户不能正常访问存放在硬盘中的数据库数据,此时如果数据库备份和二进制日志没有损坏,管理员是可以通过还原备份和恢复二进制日志的方式挽回数据损失的。
挽回数据损失的过程包括:1更换新硬盘;2还原备份;3重做备份到故障时段的二进制日志中的语句等;正常情况不会造成数据的丢失,损失的仅仅是一段时间的停机时间。
上例中,还原数据备份时,数据库中的数据回到了备份时刻的状态,而二进制日志中记录了从备份到故障前一段时间内所有用户对数据库的写 *** 作的语句,只要把这些语句按照时间顺序重新运行一遍,所还原的数据就会变成为故障前那一刻的状态,不会造成数据丢失。因此通常把保存在二进制日志中的语句重新执行的过程叫做恢复。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
以上是百度百科的描述。
其实按我的理解,数据库就是可以系统的管理存储数据,例如你有大量的数据,只是用一些普通文件(如文本文件)来存储,想想看,当你想从中提取一项或一类信息时(特别是存储数据的文件还比较多时),是一件非常麻烦的事,但是有了数据库来存储管理,就很好办了,只要输入查询条件,即使数据非常多也可以很快的提取有用的信息。而且用数据库来存储数据,可以有效的控制 *** 作权限,例如管理员和用户的权限是有区别的,不同的用户的权限也是有区别的,让不同的用户看到管理员想让他们看到的信息。你可以多上网搜搜,一定能找到你想找的的信息。
作用如下:
一、系统表存储SQL所有的系统信息。
存储有关数据库服务中的元数据所谓元数据即(比如数据服务器有哪些用户数据库、数据库服务器有哪些登陆账号,数据库中都有哪些表,每个表都有哪些字段每个数据库有哪些存储过程、视图等等的数据),系统表一般sys开头。
二、了解数据库中系统表,可以编写sql语句或编程的时候用到。
在创建数据库的时候选判断数据库是否存在;创建数据库中对象(表、视图、存储过程、索引等)是否存在,存在返回,不存在则执行创建语句。批量删除数据库中对象,比如一次性删除某个具体数据库中的所有用户创建的表、视图、索引等对象。
三、重要的几个系统表
Sysxlogins:存在与Master数据库中,(所有数据库中用户和角色),记录着所有能登陆到Sqlserver的帐号。要重启服务或reconfigurewithoverride,:记录着当前系统所有的数据库。只有Master数据中有此系统表。
扩展资料:
一、数据库优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂 *** 作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
二、数据库缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
回答的有点多请耐心看完。
希望能帮助你还请及时采纳谢谢
1事务的原理
事务就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。MySQL事务处理只支持InnoDB和BDB数据表类型。
1事务的ACID原则
1(Atomicity)原子性: 事务是最小的执行单位,不允许分割。原子性确保动作要么全部完成,要么完全不起作用;
2(Consistency)一致性: 执行事务前后,数据保持一致;
3(Isolation)隔离性: 并发访问数据库时,一个事务不被其他事务所干扰。
4(Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。
1缓冲池(Buffer Pool)
Buffer Pool中包含了磁盘中部分数据页的映射。当从数据库读取数据时,会先从Buffer Pool中读取数据,如果Buffer Pool中没有,则从磁盘读取后放入到Buffer Pool中。当向数据库写入数据时,会先写入到Buffer Pool中,Buffer Pool中更新的数据会定期刷新到磁盘中(此过程称为刷脏)。
2日志缓冲区(Log Buffer)
当在MySQL中对InnoDB表进行更改时,这些更改命令首先存储在InnoDB日志缓冲区(Log Buffer)的内存中,然后写入通常称为重做日志(redo logs)的InnoDB日志文件中。
3双写机制缓存(DoubleWrite Buffer)
Doublewrite Buffer是共享表空间的物理文件的 buffer,其大小是2MB是一个一分为二的2MB空间。
刷脏 *** 作开始之时,先进行脏页‘备份’ *** 作将脏页数据写入 Doublewrite Buffer
将Doublewrite Buffer(顺序IO)写入磁盘文件中(共享表空间) 进行刷脏 *** 作
4回滚日志(Undo Log)
Undo Log记录的是逻辑日志记录的是事务过程中每条数据的变化版本和情况
在Innodb 磁盘架构中Undo Log 默认是共享表空间的物理文件的Buffer
在事务异常中断,或者主动(Rollback)回滚的过程中 ,Innodb基于 Undo Log进行数据撤销回滚,保证数据回归至事务开始状态
5重做日志(Redo Log)
Redo Log通常指的是物理日志,记录的是数据页的物理修改并不记录行记录情况。(也就是只记录要做哪些修改,并不记录修改的完成情况) 当数据库宕机重启的时候,会将重做日志中的内容恢复到数据库中。
1原子性
Innodb事务的原子性保证,包含事务的提交机制和事务的回滚机制在Innodb引擎中事务的回滚机制是依托 回滚日志(Undo Log) 进行回滚数据,保证数据回归至事务开始状态
2那么不同的隔离级别,隔离性是如何实现的,为什么不同事物间能够互不干扰? 答案是 锁 和 MVCC。
3持久性
基于事务的提交机制流程有可能出现三种场景
1 数据刷脏正常一切正常提交,Redo Log 循环记录数据成功落盘持久性得以保证
2数据刷脏的过程中出现的系统意外导致页断裂现象 (部分刷脏成功),针对页断裂情况,采用Double write机制进行保证页断裂数据的恢复
3数据未出现页断裂现象,也没有刷脏成功,MySQL通过Redo Log 进行数据的持久化即可
4一致性
从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性
2事务的隔离级别
Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别
脏读: 指一个事务读取了另外一个事务未提交的数据。
不可重复读: 在一个事务内读取表中的某一行数据,多次读取结果不同
虚读(幻读): 是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
2基本语法
-- 使用set语句来改变自动提交模式
SET autocommit = 0; /关闭/
SET autocommit = 1; /开启/
-- 注意:
--- 1MySQL中默认是自动提交
--- 2使用事务时应先关闭自动提交
-- 开始一个事务,标记事务的起始点
START TRANSACTION
-- 提交一个事务给数据库
COMMIT
-- 将事务回滚,数据回到本次事务的初始状态
ROLLBACK
-- 还原MySQL数据库的自动提交
SET autocommit =1;
-- 保存点
SAVEPOINT 保存点名称 -- 设置一个事务保存点
ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名称 -- 删除保存点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/
课堂测试题目
A在线买一款价格为500元商品,网上银行转账
A的yhk余额为2000,然后给商家B支付500
商家B一开始的yhk余额为10000
创建数据库shop和创建表account并插入2条数据
/
CREATE DATABASE `shop`CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `shop`;
CREATE TABLE `account` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account (`name`,`cash`)
VALUES('A',200000),('B',1000000)
-- 转账实现
SET autocommit = 0; -- 关闭自动提交
START TRANSACTION; -- 开始一个事务,标记事务的起始点
UPDATE account SET cash=cash-500 WHERE `name`='A';
UPDATE account SET cash=cash+500 WHERE `name`='B';
COMMIT; -- 提交事务
# rollback;
SET autocommit = 1; -- 恢复自动提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
3事务实现方式-MVCC
1什么是MVCC
MVCC是mysql的的多版本并发控制即multi-Version Concurrency Controller,mysql的innodb引擎支持MVVC。MVCC是为了实现事务的隔离性,通过版本号,避免同一数据在不同事务间的竞争,你可以把它当成基于多版本号的一种乐观锁。当然,这种乐观锁只在事务级别为RR(可重复读)和RC(读提交)生效。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突,极大的增加了系统的并发性能。
2MVCC的实现机制
InnoDB在每行数据都增加两个隐藏字段,一个记录创建的版本号,一个记录删除的版本号。
在多版本并发控制中,为了保证数据 *** 作在多线程过程中,保证事务隔离的机制,降低锁竞争的压力,保证较高的并发量。在每开启一个事务时,会生成一个事务的版本号,被 *** 作的数据会生成一条新的数据行(临时),但是在提交前对其他事务是不可见的;对于数据的更新(包括增删改) *** 作成功,会将这个版本号更新到数据的行中;事务提交成功,新的版本号也就更新到了此数据行中。这样保证了每个事务 *** 作的数据,都是互不影响的,也不存在锁的问题。
3MVCC下的CRUD
SELECT:
当隔离级别是REPEATABLE READ时select *** 作,InnoDB每行数据来保证它符合两个条件:
1 事务的版本号 大于等于 创建行版本号
2 行数据的删除版本 未定义 或者大于 事务版本号
行创建版本号 事务版本号 行删除版本号
INSERT:
InnoDB为这个新行 记录 当前的系统版本号。
DELETE:
InnoDB将当前的系统版本号 设置为 这一行的删除版本号。
UPDATE:
InnoDB会写一个这行数据的新拷贝,这个拷贝的版本为 当前的系统版本号。它同时也会将这个版本号 写到 旧行的删除版本里。
————————————————
版权声明:本文为CSDN博主「@Autowire」的原创文章,遵循CC 40 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:>
以上就是关于数据库系统原理 什么是存储过程有什么优点全部的内容,包括:数据库系统原理 什么是存储过程有什么优点、数据库备份有什么好处、数据库到底是做什么的,和应用程序是什么关系等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)