小丸子总结数据库基本知识

来源:互联网 发布:小鸡炖蘑菇 知乎 编辑:程序博客网 时间:2024/04/24 13:52

复习一波~

一. 数据库基本原理

0.DBMS,DBS.DB

  • DBMS:数据库管理系统
  • DBS:数据库系统(包括DBMS和DB)
  • DB:数据库

1.数据模型

  • 数据结构
  • 数据操作
  • 数据的约束条件

2.概念模型

现实世界到机器世界的恶一个中间层次。

数据库设计人员用来设计数据库的有力工具。

数据库设计可以使用:E-R图
这里写图片描述

3.层次模型

4.数据库系统的三级模式结构

  • 外模式(用户模式) -> 视图( view )
  • 模式 (逻辑模式) -> 数据库中全体数据的逻辑结构和特征
  • 内模式(存储模式) -> 数据的物理结构和存储方式

5.数据库系统的两层映像

  • 外模式/模式
  • 模式/内模式

两层映像保证了数据库系统的较高的逻辑独立性和物理独立性。

6.什么是数据与程序的物理独立性?什么是数据与程序的逻辑独立性?

  • 数据与程序的物理独立性:模式改变的时候,外模式不变。
  • 数据与程序的逻辑独立性:数据的存储结构变了,但是模式不变。

7.范式

  • 1NF:属性具有原子性,不可再分
  • 2NF:记录要有唯一标识,即实体的唯一性。要有主键
  • 3NF:任何字段不能由其他字段派生
  • BNF:任何非主属性不能对主键子集依赖

数据库的三范式是:
第一范式( 1NF ): 字段具有 原子性 , 不可再分 。所有关系型数据库系统都满足第一范式)数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。
第二范式( 2NF ): 第二范式( 2NF )是在 第一范式( 1NF )的基础上 建立起来的,即满足第二范式( 2NF )必须先满足第一范式( 1NF )。要求 数据库表中的每个实例或行必须可以被惟一地区分 。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为 主关键字或主键 。
第二范式( 2NF )要求 实体的属性完全依赖于主关键字 。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式的要求如下: 满足第三范式( 3NF ) 必须先满足第二范式( 2NF ) 。简而言之,第三范式( 3NF )要求一个数据库表中 不包含 已在其它表中 已包含的非主关键字信息 。所以第三范式具有如下特征:
1 ,每一列只有一个值
2 ,每一行都能区分。
3 ,每一个表都 不包含其他表已经包含 的非主关键字信息。
例如,帖子表中只能出现发帖人的 id ,而不能出现发帖人的 id ,还同时出现发帖人姓名,否则,只要出现同一发帖人 id 的所有记录,它们中的姓名部分都必须严格保持一致,这就是 数据冗余 。

设有关系模式R(A,B,C,D),其数据依赖集:F=((A,B)->C,C->D),则关系模式R的规范化程度最高达到————。

答:2NF

因为3NF要求不存在传递依赖。所有非主属性直接依赖于码。

8.事务的4个基本特性

-(atomic) 原子性:事务中包含的操作被看作一个逻辑单元。要么全部成功,要么全部失败。
- (consistency)一致性:操作完成时,数据必须处于一致的状态,数据的完整性约束没有被破坏,事务在回滚到事务开始前的状态,就像事务没有发生过一样。
- (isolation)隔离性:事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性 和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
- (durability)持久性:事务结束后,事务处理的结果必须得到固化。

9.事务操作

  • 创建事务:start transaction 或 begin
  • 回滚:rollback
  • 提交:commit

二. sql语言

1. sql语言分类

  • DDL:数据定义语言(create,drop,alter,declare)
  • DML:数据操纵语言(delete,update,insert)
  • DCL:数据控制语言(grant,revoke,commit,rollback)
  • DQL:数据库查询语言:(select)

(1)创建数据库

create database dbname

(2)删除数据库

drop database dbname

(3)创建新表

create table tname

创建一个学生表student,它由学号Sno,姓名Sname,性别Ssex,年龄Sage,所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。

create table student (Sno char(10) NOT NULL UNIQUE,Sname char20UNIQUE,Ssex char(2),Sage int,Sdept char(20))

(4)根据旧表创建新表

create table tname like oldtable

(5)删除新表

drop table tname

(6)增加一个列 删除一列 修改一列

alter tablename add colunm colname coltype
alter tablename drop column colname 
alter tablename alter colume colname coltype

(7)添加主键 删除主键

添加:

alter tablename add primary key(colname)

删除:

alter tablename drop primary key(colname)

(8)创建索引 删除索引

create index indexname on tablename
drop index indexname on tablename

(9)创建视图 删除视图

create view viewname as select statement
drop view viewname

(10)选择,插入,更新,查找,排序,总数,求和,平均,最大,最小

选择:select * from tablename where
插入:insert into tablename(fields1,fields2) values(value1,value2)
更新:update tablename set fileds=value1 where
查找:select * from tablename like '%value%'
排序:select * from tablename order by fields
总数:select count * as totalcount from tablename
求和:select sum(fileds) as sumvalue from tablename
平均:select avg(fields) as avgvalue from tablename
最大:select max(fields) as maxvalue from tablename
最小:select min(fields) ad minvalue from tablename

(11) union

连接两个结果表,并去除重复项。
如果union和all一起使用的话,不会去除重复项。

(12) except

在结果表一中但不再结果表2中,生成一个新的结果表。去除重复行。
如果except与all一起使用,不会去除重复项。

(13)interset

既在结果表一,又在结果表二中的结果,产生一个新结果表。去除重复行。
如果interset与all一起使用的时候,不去出重复项。

(14)left outer join

连个表连接,结果包括两个表连接成功的项和左表的项。

同理,right outer join
两个表连接,结果包括两个表连接成功的项和右表的项。

同理,full outer join
两个表连接,结果包括两个表连接成功的项,和两个表各自的记录。

(15)sql自查询语句

单行子查询

select * from buycar where id=(select id from clothes where )

多行子查询

select * from bugcar where id in (select id from clothes where)

Student表和enrolls表中,查询成绩在80分以上的的学号和姓名。

select id,name form Student where id in(select id from enrolls where grades>=80) 

多列子查询

select a,b,c from buycar where id in (select id from clothes where)

内联视图子查询

select * from(select a,b,c from clothes)

在having子句中使用子查询

select * from buycar group by id having avg(money)>100

查询Student表中每个系有三个以上的学生的所在系。

select dept from student group by dept having count(*)>=3

记录数查询

select count(money) from buycar 

* between and*

select * from buycar where money between 20 an 80

单表查询时,去掉重复行

select distinct name from student

(16)grant 授权

grant insert on table studentto person1

(17)收回特权

revoke inserton table studentfrom person1

三. 常见的数据库

关系型数据库:mysql,db2,postgresql

非关系型数据库:mongodb

1 0
原创粉丝点击