数据库与SQL语言

时间:2023-03-09 00:52:54
数据库与SQL语言

数据库(DB) :长期储存在计算机中、有组织、可共享的数据的集合。

特点
(1)数据按一定的数据模型组织、描述和储存;
(2)较小的冗余度;
(3)数据独立性较高;
(4)易扩展;
(5)可共享(不同用户可按各自的用法使用数据库中的数据;多个用户可以同时共享数据库中的数据资源)

数据库设计:主要包括需求分析、概念结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运行和维护阶段。

数据库管理系统DBMS: 数据库系统的核心组成部分,它是位于用户与操作系统之间的对数据进行高效管理的系统软件。作用是科学地组织和存储数据、高效地获取和维护数据。

功能

(1)数据定义:提供数据定义语言(DDL);定义数据库中的数据对象

(2)数据操纵:提供数据操纵语言(DML);实现对数据库的基本操作 (查询、插入、删除和修改)

(3)数据库的事务管理和运行管理(核心所在)

(4)数据库的建立和维护:数据库初始数据装载转换;数据库转储;介质故障恢复;数据库的重组织;性能监视分析等

Oracle数据库、数据文件、表空间

1、Oracle数据库:又名Oracle RDBMS,是甲骨文公司的一款关系数据库管理系统。

2、数据文件:每一个ORACLE数据库有一个或多个物理的数据文件,包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。

3、表空间:是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中,但主要存放的是表,所以称作表空间。

数据库事务:指作为单个逻辑工作单元执行的一系列操作。

特点:

(1)原子性:一个事务要么全部执行,要么不执行。

(2)一致性:事务的运行并不改变数据库中数据的一致性。

(3)独立性:事务间不会交错执行。

(4)持久性:事务运行成功以后,就系统的更新是永久的。

范式:

1NF:第一范式。关系模式R所有属性的值域中每个值都不可再分解。

2NF:第二范式。若R是第一范式,且R中每个非主属性完全函数依赖于R的某个候选键。(传递依赖)

3NF:第三范式。若R是第二范式,且每个非主属性都不传递依赖于R的候选键。

BCNF:BC范式。若R是第一范式,且每个属性都不传递依赖于R的候选键。

4NF:第四范式。D是R上的多值依赖集合,若D中成立非平凡多值依赖X→ → Y时,X必是R的超键,则是第四范式。

外模式/逻辑模式映像功能:保证数据的逻辑独立性;

模式/内模式映像功能:保证数据的物理独立性。

在关系模型中,数据的逻辑结构是一张二维表,表中的每行(即数据库中的每条记录)是一个元组,每列是一个属性。

关系模型的完整性,包括实体完整性、域完整性、参照完整性和用户定义完整性。前三者是关系模型必须满足的完整性约束条件。

索引

1、主索引:候选索引的特例,能唯一标识一条记录,只能由一个字段组成。一个表只能建立一个主索引

2、候选索引:也能唯一标识一条记录,但不一定只由一个字段组成,一个表可以建立多个候选索引

3、普通索引:没有任何限制,不能唯一标识一条记录,可以任意建立,数量不限。建立普通索引的主要目的是为了加快查询速度和建立表之间的联系。

4、唯一索引:已经淘汰不用了,它的唯一性是指索引项的唯一而不是字段值的唯一。

5、聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序,一个表只能包含一个聚集索引,但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

6、非聚集索引:数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。非聚集索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。对于非聚集索引,可以为在表非聚集索引中查找数据时常用的每个列创建一个非聚集索引。有些书籍包含多个索引,例如,一本介绍园艺的书可能会包含一个植物通俗名称索引和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。

应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,降低效率。

视图

视图在以下情况不允许更新

1、由两个以上基本表导出;

2、视图的字段来自字段表达式或常数,则不允许对视图执行INSTER和UPDATE操作,但允许delete;

3、视图的字段来自聚集函数;

4、视图中含有GROUP BY子句;

5、视图中含有DISTINCT短语;

6、视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表;

7、一个不允许更新的视图上定义的视图;

表和视图的区别:

表是数据库中的主要结构,它总是表示单个的、特定的集合。每个表至少包含一个字段,即一个主键,它唯一地标识表的每条记录。

视图是由来自数据库中的一个或多个表或多个表的字段所组成的一个虚拟的表。自身不存储任何数据,存储在数据库中的有关视图的唯一信息就是它的结构。

SQL语言

结构化查询语言,关系数据库的标准语言。

(1)查询select

聚合函数:sum,avg,max,min,count

例1:找出表p里面num最小的数

select * from p where num <=all (select num from p)

select top 1 num from p order by num

select * from p where num =(select Min(num) from p)

例2:复制表(只复制结构,源表A,新表B)

select * into B from A where 1=0

例3:查询总人数

select count(*) from student

例4:统计平均分超过80的学生,列出学号和平均成绩

select xh,AVG(grade)from sc

group by xh

having avg(grade)>=80

例5:按成绩降序排列,若成绩相同则按学号升序排列

order by grade DESC, xh ASC

例6:Null 值使用 is not 或者 is 比较,不能使用=比较;

(2)定义:create、drop(删除整张表)、alter

例1:建立一张临时表

create table #Temp(字段1 类型,字段2 类型···)

例2:给表Department 增加一列字段notes,长度为10的字符串,默认值0。

Alter  table  Department  add  notes varchar(10) default 0;

(3)操纵:insert、update、delete(删除表的数据)

例1:为表Department 增加一条记录 (‘12’, ‘研发部’, ‘张三’)

Insert into Department(dept_id,dept_name,dept_leader)  values (‘12’,’研发部’,’张三’) ;

例2:更新一条dept_id=’12’的记录为 (‘12’, ‘研发部’, ‘张三新’)

Update Department  set  dept_leader=’张三新’  where  dept_id=’12’;

注:DELETETRUNCATE TABLE都是删除表中的数据的语句,它们的不同之处在于:

1、TRUNCATE TABLE比DELETE的速度快;

2、TRUNCATE TABLE 是删除表的所有行,而DELETE是删除表的一行或者多行(除非DELETE不带WHERE语句);

3、在删除时如果遇到任何一行违反约束(主要是外键约束),TRUNCATE TABLE仍然删除,只是表的结构及其列、约束、索引等保持不变,但DELETE是直接返回错误;

4、对于被外键约束的表,不能使用TRUNCATE TABLE,而应该使用不带WHERE语句的DELETE语句。

5、如果想保留标识计数值,要用DELETE,因为TRUNCATE TABLE会对新行标志符列搜用的计数值重置为该列的种子。

(4)控制:grant(授权)、revoke(收回授权)

例1:经理(manager)有权查询、修改雇员(emp)信息并有权授权

Grant all priviliges on emp to manager with grant option

常用符号

1、+:连接字符串;

2、%:表示任意0个或多个字符;

3、_:表示任一字符;

存储过程和函数的区别:

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

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

@表示声明一个局部变量;

@@表示声明一个全局变量;

申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;

赋值:set @num=value 或者 select @num=value;

游标:用于定位结果集的行。通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,若不等于0则表示出错或到了最后。

PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert;PCTUSED:是指当块里的数据低于多少百分比时,又可以重新被insert。

举例说明:一个杯子一共可装10分水:

PCTFREE = 10,说明杯子装到9分水,就不能再装了,即:不能进行insert操作,但可以进行update操作。

PCTUSED = 40,说明杯子中的水喝到4分以下,就可以往里面装水,即:可以进行insert操作。