数据库入门
数据库入门一、简介1. 数据2. 数据库(DB)3. 数据库管理系统(DBMS)4. 数据库系统(DBS)二、关系型数据库和非关系型数据库1. 常用数据库2. 关系型数据库0. 适用场景1. 优点2. 缺点3. 非关系型数据库0. 适用场景1. 优点2. 缺点3. 非关系型数据库的分类和比较1. 文档性2. key-value型3. 列式数据库4. 图形数据库三、SQL1. 数据定义1. 定义基本表2. 修改基本表3. 删除基本表2. 数据查询3. 数据更新1. 插入数据2. 修改数据3. 删除数据4. 视图四、数据库的安全性与完整性
一、简介
我们先来介绍一些数据库最常用的术语和基本概念:数据、数据库、数据库管理系统和数据库系统。
1. 数据
数据是数据库中存储的基本对象。数据在大多数人的脑海中,第一反应就是数据,例如23,45,-90等等,其实数字只是最简单的一种数据,是数据结构的一种传统和狭义的理解。数据的准确定义:描述事物的符号记录称为数据。描述事物的符号可以是数字,也可以是文字、图形、图像、声音、语言等,数据有多重表现形式,他们都可以经过数字化后存入计算机。
2. 数据库(DB)
数据库,顾名思义,是存放数据的仓库。只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。
严格地讲,数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享。
数据库的三个基本特点:永久存储、有组织和可共享。
3. 数据库管理系统(DBMS)
了解了数据和数据库的概念,下一个问题就是如何科学地的组织和存储数据,如何高效地获取和维护数据。完成这个任务的是一个系统软件 - 数据库管理系统。
数据库管理系统是位于用户和操作系统之间的一层数据管理软件。
4. 数据库系统(DBS)
数据库系统是指在计算机系统中引入数据后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。应该指出的是,数据库的建立、使用和维护等工作只靠一个DBMS远远不够,还要有专门的人员来完成,这些人被称为数据库管理员。
我们大都把数据库系统简称为数据库。
二、关系型数据库和非关系型数据库
1. 常用数据库
下面我们就来看下关系型数据库和非关系型数据有何不同,又分别有什么样子的应用场景。
2. 关系型数据库
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。
0. 适用场景
日志、埋点、论坛、博客等
1. 优点
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
2. 缺点
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
3. 非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
0. 适用场景
所有有逻辑关系的数据存储,like: 大数据、王彬那边
1. 优点
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
2. 缺点
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
3. 非关系型数据库的分类和比较
1. 文档性
2. key-value型
3. 列式数据库
4. 图形数据库
三、SQL
SQL集数据查询、数据操纵、数据定义和数据控制功能于一体。
下面以关系型数据库来讲:
SQL的动词:
SQL功能 动词
数据查询 select
数据定义 create、drop、alter
数据操纵 insert、update、delete
数据控制 grant、revoke
基本上就是咱们常说对表的的增删改查,对数据的增删改查等操作。
支持SQL的关系数据库管理系统(RDBMS)同样支持关系数据库三级模式结构,如下图。其中外模式对应于视图(view)和部分基本表(Base Table),模式对应于基本表,内模式对应于存储文件(Stored File)。
[图片上传失败...(image-9bf58e-1547800615119)]
[图片上传中...(SQL对关系数据库模式的支持.jpeg-8cd207-1547801832942-0)]
基本表和视图一样,都是关系。
基本表是笨得很独立存在的表,在SQL中一个关系就对应一个基本表。
一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
视图是从一个或几个基本表导出的表。他本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍然存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同。
1. 数据定义
关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有表、视图和索引。因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义,如下表:
我是用docker启动的数据库,这是启动命令:
docker start mysql
1. 定义基本表
ccreate table <表名> (<列名> <数据类型> [列级完整性约束条件])
[,(<列名> <数据类型> [列级完整性约束条件])]
...
如下,我创建了名为Student
一个表:
创建一个“学生”表 Student
create table Student (
Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
);
创建一个“课程”表Course
CREATE table Course (
Cno char(4) primary key,
Cname char(40),
Cpno char(4), # Cpnno 的含义是先修课
Ccredit smallint,
FOREIGN key (Cpno) REFERENCES Course (Cno) # 表级完整性约束条件,Cpno是外码,
)
建立学生选课表SC
create table SC (
Sno char(9),
Cno char(4),
Grade smallint,
primary key (Sno, Cno),
FOREIGN key (Sno) REFERENCES Student(Sno),
FOREIGN key (Cno) REFERENCES Course (Cno)
)</pre>
2. 修改基本表
随着应用环境和应用需求的变化,又是需要修改已建立好的基本表,SQL语言用alter table 语句修改基本表,其一般格式为:
alter table <表名>
[add <新列名> <数据类型> [完整性约束]]
[drop <完整性约束名>]
[alter column <列名> <数据类型>];
alter table Student add Sentrance date;# 向Student表增加“入学时间”列,其数据类型为日期型。</pre>
3. 删除基本表
当某个基本表不再需要时,可以使用drop table 语句删除它。其一般格式为:
drop table <表名> [restrict | cascade]
-
restrict
则该表的删除是有限制条件的,与删除的基本表不能被其他表的约束所引用(如,check,foreign key等约束),不能有视图,不能有触发器,不能有存储过程或函数等。
-
cascade
则该表的删除没有限制条件,在删除基本表的同时,相关的依赖对象,例如视图都将被一起删除。
drop table SC
2. 数据查询
数据库查询是数据库的核心操作。SQL提供了select语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。起一般格式为:
select [all | distinct] <目标列表达式>[, <目标列表达式>]... from <表名或视图名>[, <表名或视图名>]... [where <条件表达式>][group by <列名1>[having <条件表达式>]][order by <列名2> [asc | desc]]
3. 数据更新
数据更新操作有3种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。
1. 插入数据
SQL的数据插入语句insert通常有两种形式。一种是插入一个元组,另一种是插入一个子查询结果。
-
插入元组
insert
into <表名> [ ( <属性列1> [, <属性列2> ...)]
values (<常量1>[, <常量2>]...)
插入单条数据
insertintoStudent (Sno, Sname, Ssex, Sdept, Sage)
VALUES("200215128", '贺贺', "女", "IS", 28)插入多条数据
insertintoStudent (Sno, Sname, Ssex, Sdept, Sage)
VALUES("200215131", '贺贺3', "女", "IS", 28),("200215130", '贺贺2', "女", "IS", 28),("200215132", '贺贺4', "女", "IS", 28)</pre> -
插入子查询结果
inser
into <表名> [(<属性列1> [, <属性列2> ...])]
子查询:
2. 修改数据
修改操作又称为更新操作,其语句的一般格式为:
update <表名>
set <列名>=<表达式>[,<列名>=<表达式>]...
[where <条件>];
update Student set Sage= 29 where Sno="200215128" # 修改一个元组
update Student set Sage=Sage+1; # 修改多个元组
update SC set Grade=0 where 'cs'= (select Sdept from Student s where s.Sno = SC.Sno ) #带子查询的修改语句
</pre>
3. 删除数据
删除指定表中数据,表格式保留,也就是如果全部删除表中数据,那么表就是一个没有数据的空表。删除语句的一般格式为:
delete
form <表名>
[where <条件>];
delete from Student as s where s.Sno="200215128" # 删除某一个元组的值
delete froM Student # 删除整张表的值</pre>
4. 视图
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据扔存放在原来的基本表中。所以基本表中的数据发生变化,从驶入中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据以及其变化。
视图一经定义,就可以和基本表一样被查询、被删除。
四、数据库的安全性与完整性
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
数据的完整性和安全性是数据库保护的两个不同方面。安全性是防止用户非法使用数据库。完整性则是防止合法用户使用数据库时向数据库中加入不合语义的数据。
数据的安全性是指数据库是否容易攻破。数据的完整性是指两个表之间的完整连接。