dream

一个菜鸟程序员的成长历程

0%

数据库系统原理第十四节

数据库系统原理第十四节

数据库安全和保护

事务与并发控制

所谓事务是用户定义的一个数据操作序列,这些操作可作为一个完整的工作单元,要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务中的操作一般是对数据的更新操作,包括增删改

begin transaction开始
commit 或 rollback结束

事务的特征

  • A 原子性
  • C 一致性
  • I 隔离性
  • D 持续性
并发操作问题
  • 丢失更新
  • 不可重复读
  • 读‘脏’数据
封锁

封锁 是最常用的并发控制技术

基本思想:需要时,事务通过向系统请求对它所希望的数据对象加锁,以确保它不被非预期改变

一个实质上就是允许或阻止一个事务对一个数据对象的存取特权

基本的封锁类型

  • 排它锁,用于写操作
  • 共享锁,用于读操作

封锁的粒度
粒度越细,并发性就越大,但软件复杂性和系统开销也就越大

封锁的级别又称为一致性级别或隔离度

  • 0级封锁:不重写其他非0级封锁事务的未提交的更新数据
  • 1级封锁:不允许重写未提交的更新数据。防止了丢失更新的发生
  • 2级封锁:既不重写也不读未提交的更新数据(防止了读脏数据)
  • 3级封锁:不读未提交的更新数据,不写任何(包括读操作)未提交数据

活锁:先来先服务
死锁:预防

  • 一次性锁请求
  • 锁请求排序
  • 序列化处理
  • 资源剥夺

可串行性
一组事务的一个调度就是它们的基本操作的一种排序

在数据库系统中,可串行性就是并发执行的正确性准则

两段封锁法

  • 发展或加锁阶段
  • 收缩或释放锁阶段

备份与恢复

备份

1
2
3
4
5
select * into outfile 'file_name' export_options  
dumpfile 'file_name'
fields terminated by ',' 逗号分隔
optionally enclosed by "" 字符串用双引号
lines terminated by '?' 问号分隔每行数据

dumpfile 导出的备份文件里面所有的数据都彼此紧挨着

导入

1
2
3
4
load data infile 'file_name' into table table_name
fields terminated by ',' 逗号分隔
optionally enclosed by "" 字符串用双引号
lines terminated by '?' 问号分隔每行数据

数据库生命周期

  • 需求分析
  • 系统功能与数据库的设计
  • 系统功能与数据库的实现
  • 测试与维护

php mysql应用

连接数据库非持久连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$con = mysql_connect("localhost:3306","root","123456");

持久连接 mysql_pconnect

选择数据库 mysql_select_db("test", $con)

执行 sql mysql_query("set names 'gbk'")

$res = mysql_query($sql, $con);

$array = mysql_fetch_array($res, MYSQL_NUM);

mysql_close($con) or die("关闭失败");