一、基本入门概念
DBMS:数据库管理系统,就是数据库软件
数据库:保持有组织的数据的容器(通常是一个文件和一组文件),不管数据是什么或如何组织的,是通过DBMS创建和操纵的容器。
SQL:结构化查询语句,是专门用来与数据库沟通的语言,需要一个支持SQL语句执行的应用程序
表:某种特定类型数据的结构化清单,存储在表中的数据是同一种类型的数据或清单
二、内连接与外连接
内连接:也称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集是两个表中所匹配的数据,而舍弃不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的行的所有行,所以内连接可能会造成信息的丢失。内连接的语法如下:
- select fieldlist from table [inner] join table2 on table1.column=table2.column
外连接:不仅包含符合连接条件的行,而且包含左表(LEFT OUTER JOIN)、右表(RIGHT OUTER JOIN)或两个边接表(FULL OUTER JOIN)中的所有数据行。外连接的用法与内连接一样,只是将INNER JOIN换成相应的外连接关键字即可。
内连接只显示符合连接条件的记录,外连接除了显示符合连接条件的记录外,还显示边表的记录。
三、事务
事务是数据库中一个单独的执行单元,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性atomicity、一致性consistency、隔离性isolation和持久性durability)属性。事务是数据库运行中的一个逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。
严格来说,数据库事务属性ACID都是有数据库管理系统来进行保证的,在整个应用程序执行的过程中应用无需去考虑数据库的ACID实现。
事务——指一组SQL语句
回退——指撤销指定的SQL语句和过程
提交——指将未存储的SQL语句结果写入数据库表
保留点——指事务处理中设置的临时占位符,可以对它发布回退(与回退整个事务处理不同)
使用ROLLBACK(SQL)命令来回退(撤销)SQL语句
使用COMMIT进行明确的提交
SAVEPOINT或SAVE TRANSACTION设置保留点(不同DBMS不同)
回退到保留点的语法:ROLLBACK TRANSACTION 保留点
(不同DBMS不同) ROLLBACK TO 保留点
事务处理块标识:
- BEGIN TRANSACTION
- .......
- COMMIT TRANSACION --不同DBMS语法不同
四、存储过程
SQL语句要先编译,然后再被执行。在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行。
使用存储过程可以增强SQL语句的功能和灵活性,并且可以保证数据的安全性和完整性,同时存储过程可以使没有权限的用户在控制之下间接地存取数据库,也保证了数据的安全。
但存储过程不等同于函数,两者虽然本质上没有区别,但还是有以下几方面的区别:
(1)存储过程一般是作为独立的部分来执行的,而函数可以作为查询语句的一个部分来调用
(2)一般存储过程实现的功能较为复杂,函数实现的功能针对性较强
(3)存储过程可以返回多个参数,而函数只能返回一个参数
(4)函数可以嵌入在SQL中使用,可以在select中调用,但存储过程不能
(5)函数不能直接操作实体表,只能操作内建表
(6)存储过程在创建时即在服务器上进行了编译,执行速度更快
五、主键、外键
主键:也成主码,是数据库中的一个或多个字段,是表中记录的唯一标识符,主键不能为空,一个表中只能有一个主键,主键列可以是一列或多列,主键可唯一的标识一行
外键:也成外码,表示的是两个关系之间的联系。当公共关键字在一个关系中为主键时,这个公共关键字被称为另一个关系的外键。外键用来和其他表建立联系,实现表之间的关联,一个表可以有多个外键,也可以为空。
六、死锁
在操作系统中若干程序并发执行,他们不断的申请、释放资源,在此过程中,由于争夺资源而处于无限期的等待状态,造成程序无法继续执行,若无外力作用,他们都无法推进下去,这时称系统处于死锁状态或系统产生了死锁。
产生死锁的原因:系统资源不足;进程运行推进顺序不对;资源分配不当
七、共享锁和互斥锁
在数据库中,锁主要是对数据进行读、写保护的一种机制,从数据库系统的角度看,一般可将锁分为共享锁和互斥锁
共享锁:简称S锁,也叫读锁。用于不更改或不更新数据的操作(只读操作),如果事务T对数据A加上共享锁后,其他事务只能对A再加共享锁,而不能加互斥锁。共享锁可以阻止其他并发运行的程序获取重叠的独占锁定,但是允许该程序获取重叠的共享锁定。一般要求在读取数据前要想该数据加共享锁。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放。
互斥锁:简称X锁,也叫排他锁,用于数据修改操作,确保不会对同一资源进行多重更新。用互斥锁来保证在任意时刻,只能有一个线程访问对象。一般要求在修改数据前要向该数据加互斥锁。
对于锁的使用,也有一定的限制,需要遵守两个事项:先锁定后操作;事务结束后必须解锁
八、一二三四范式
范化是在识别数据库中的数据元素、关系、以及定义所需的表和各表中的项目这些初始工作之后的一个细化过程。
1NF,第一范式。第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。第一范式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或由组属性组成。
2NF,第二范式。满足第一范式,并且要求数据库表的每个实例或行必须可以被唯一地区分。例如:在选课关系表中(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但是非主属性学分对关键字只是部分依赖,而不是完全依赖。 解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分)。新关系通过学生表中外关键字课程号联系,在需要时进行连接。
3NF,第三范式。如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。
4NF,第四范式。例如,职工表(职工编号,职工孩子姓名,职工选修课程)。将职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。
九、CHECK约束
CHECK约束是指限制表中某一列或某些列中可接受的数据值或数据格式,它用于限制列的取值范围,使用形式为:CHECK(约束表达式)
十、视图
视图是从数据库的基本表中选取出来的数据组成的逻辑窗口,它是一个虚表,它包含的不是数据而是根据需要检索数据的查询。视图定义了一种封装SELECT语句的层次,可用来简化数据处理,重新格式化或保护基础数据。在数据库中,存放的只是视图的定义而已,不存放视图包含的数据,这些视图仍存放在原来的基本表结构中。
通过引入视图机制,用户可以将注意力集中在其关心的数据上而非全部数据,提高了用户效率和用户满意度。定义视图可以将表与表之间复杂的操作连接和搜索条件对用户不可见,用户只需简单的对一个视图进行查询即可,所以增加了数据的安全性,但是不能提高查询的效率。
- CREATE VIEW ProductCustomers AS --视图必须唯一命名,创建视图
- SELECT cust_name,cust_contact,prod_id
- FROM Customers,Orders,OrderItems
- WHERE Customers.cust_id=Orders.cust_id AND OrderItems.order_num=Orders.order_num;
- #可以这样使用视图
- SELECT*
- FROM ProductCustomers
- WHERE prod_id="RGAN01";
- </pre><pre name="code" class="sql">此外,可用视图重新格式化检索出的数据、过滤不想要的数据(使用WHERE),使用计算字段和视图。视图容易创建,很好使用,可大大简化复杂数据的处理。