数据库基础
数据库技术所研究的问题:
- 如何科学地组织和存储数据
- 如何高效地获取和处理数据(核心:管理数据)
SQL的定义
- SQL是Structured Query Language(结构化查询语言)。
- SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。
- 在使用SQL时,只需要发出"做什么"的命令,“怎么做"是不用使用者考虑的。
Data 数据
数据 (Data) 定义:对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。
数据的种类:文字、图形、图象、声音。
数据的形式不能完全表达其内容。
Database 数据库
数据库 (Database) DB,定义:
- 长期储存在计算机内的、有组织的、可共享的数据集合。
- 数据库中的数据按一定的数据模型组织、 描述和储存。
- 数据库中数据特征:具有较小的冗余度(数据重复)、较高的数据独立性(互不影响)和易扩展性(可修改),并可为各个用户共享。
DBMS 数据库管理系统
数据库管理系统(DBMS)定义:
- 位于应用程序与存储数据的之间的一层数据管理软件。
- 是基础软件,是一个大型复杂的软件系统。
DBMS的用途:
科学地组织和存储数据、高效地获取和维护数据。
四方面功能:
-
数据库的定义功能:
在SQL语言中——DDL语言(数据库定义语言),提供了三个语句:create
创建、alter
修改、drop
删除,操作的对象是数据库的基本架构——表。以表的形式来组织和存放各种数据。 -
数据库的操作功能:
借助于SQL语言中——DML语言(数据库操作语言),对数据库中存储的数据进行增(insert
)删(delete
)改(update
)查(select
)。即单独数据操纵语言DML及其编译程序,实现对数据库的基本操作。基本操作有两类检索和更新。 -
数据库的保护功能:
数据库的数据恢复、数据库的并发控制、数据完整性控制和数据安全性控制。 -
数据库的维护功能:
数据库的数据导入、转换、存储、数据库性能监控等,以及表结构的维护。
优点:
- 相互关联数据的集合
- 较少的数据冗余
- 程序与数据相互对立
- 保证数据的安全、可靠、正确
- 数据可以并发使用,并能同时保证一致性
DBS 数据库系统
数据库系统 (DBS) 定义:一般由数据库(DB)、数据库管理系统(DBMS)及其开发工具、应用系统、数据库管理员和用户构成。
DBS = DB + DBMS + 应用系统 + DBA + 用户
关系图:
数据库系统的发展经历了3个阶段:
- 网状数据库:采用网状模型(图形结构)作为数据的组织方式。
- 层次数据库:采用层次模型(树形结构)
- 关系数据库:采用关系模型(简单二维表结构)
信息和数据:
信息:是指数据经过加工处理后所获取的有用知识。信息是以某种数据形式表现的。
信息的3种世界:
- 现实世界:存在于人脑之外的客观世界。
- 信息世界:现实世界在人们头脑中的反映,又称观念世界。
- 数据世界:信息世界中的信息数据化后对应的产物,就是将信息世界中的信息经过抽象和组织,按照特定的数据结构,将数据存储在计算机中。
实体—联系模型
实体—联系模型 → E–R图
- 实体
客观事物在信息世界中称为实体 ( Entity ) ,它是现实世界中任何可区分、识别的事物。实体集,是实体的集合,具有相同属性的实体。 - 属性
描述实体或者联系的性质或特征的数据项。(实体特征的表现) - 联系
反映事物内部或事物之间的关联集合。
常见的实体联系有三种:一对一联系(单独辅导)、一对多联系(老师对学生)和多对多联系(学生对课程)。(没有多对一)
关系模型
关系模型(重点)
指关系型数据库中数据的组织方式。
关系的基本概念
- 关系:一个关系是一张二维表,通常将一个没有重复行、重复列的二维表看成一个关系,每个关系都有一个关系名(即表名)。
- 元组:二维表的每一行在关系中称为元组,也称记录。 在MySQL中,一个元组对应表中一个记录。
- 属性:二维表的每一列在关系中称为属性,也称字段。每个属性都有一个属性名(即列名/字段名),属性值则是各个元组属性的取值。
- 域:属性(列)的取值范围称为域。域作为属性值的集合,其类型与范围具体由属性的性质及其所表示的意义确定。同一属性只能在相同域中取值。
- 关键字:关系中能唯一区分、 确定不同元组的属性或属性组合,称为该关系的一个关键字。(一列或多列) 关键字 ⟺ 唯一、不重复、不能为空
关键字
- 主键(主关键字):针对一个表中某个列来说的,假如把一个表中的某个列设置成主键,那么这个列就一定要求:唯一、不重复、不能为空。
- 外键:针对两个表来说,加强表与表之间的联系。外键的设置也是在于列。
关系模式:对关系的描述成为关系模式,其格式为:关系名(属性名1, 属性名2, ……, 属性名n)
;例如,学生信息表(姓名, 性别, 年龄, 生日) 英文字符
关系的基本特点
在关系模型中,关系具有以下基本特点:
① 关系必须规范化,属性不可再分割。
② 在同一关系中不允许出现相同的属性名。
③ 在同一关系中元组的顺序可以任意。
④ 在同一关系中属性的顺序可以任意。
关系运算
关系运算主要有选择、投影和连接3种。
- 选择运算:从关系模式中找出满足给定条件的元组组成新的关系。(从行的角度进行的运算)
- 投影运算:从关系模式中指定若干属性组成新的关系。 (从列的角度进行的运算)
- 连接运算:从两个关系的笛卡儿积中选取属性间满足一定条件的元组,组成新的关系。(冗余)
关系的完整性约束
- 实体完整性:主属性值(主键的值)不能为空。
- 参照完整性 ( 引用完整性 ) :主键与外键的关系。
针对两个表(主表和从表),参照关系:从表参照主表(列);从表执行操作需要询问主表意见并允许,且主表需要存在相应内容。 - 域完整性 ( 用户定义完整性 ) :限制了某些属性中出现的值,把属性限制在一个有限的集合中。如若属性类型是正整数,那么输入值则不能为小数等其它任何非整数。
关系模型的规范化(范式)
关系模式要满足的条件称为规范化形式,简称范式NF
。
关系模型规范化的目的:
消除存储异常,减少数据冗余,保证数据的完整性和存储效率,一般规范为3NF
。
- 第一范式 1NF
如果关系R的所有属性均为简单属性,即每个属性都是不可再分的,则称R满足第一范式。
- 第二范式 2NF
如果关系R满足第一范式,且非主键字段完全依赖于主键,则称R满足第二范式。
- 第三范式 3NF
如果关系R满足第二范式,且非主键字段之间不存在依赖关系,则称R满足第三范式。
一个基本的关系型数据库要满足第一范式,一个完整的关系型数据库要满足第三范式。
E-R 图
E-R图也称实体联系图( Entity Relationship Diagram ),提供了表示实体
类型、属性和联系的方法,用来描述现实世界的概念模型。
- 用矩形表示实体型,矩形框内写明实体名
- 用椭圆表示实体属性,椭圆内写明实体属性名
- 用菱形表示实体型间的联系,在菱形内写明联系名
- 用线段连接起来
(n,m为多,1为一)
一对一 1:1,一对多 1:m,多对多 n:m
常见的数据库
- Oracle
应用广泛、功能强大,分布式数据库系统,可移植性好 - MySQL
开源、免费、与PHP组成经典的L AMP组合
快速的、可靠的和易于使用 - SQL Server
Web上最流行的用于存储数据的数据库
易用性好但只能在Windows上运行
MySQL
Mysql数据库是一种关系型数据库管理系统,是一种开源软件由瑞典MySQL AB公司开发,08年1月16日被Sun公司收购,09年Sun公司又被Oracle公司收购。端口3306
优点:体积小、速度快、总体拥有成本低、开源、可移植(跨平台)、可以在不同的操作系统中使用,轻量级数据库。
(系统自带库不做修改,不能删除):
查看现有数据库
使用show databases;
命令 (在cmd端注意分号)
新建自己的数据库
使用create database 库名;
命令
删除自己的数据库
使用drop database 库名;
命令
数据类型
整数类型:int
小数类型其格式:decimal(总长度, 小数位)
例如,decimal(5, 2) 123.45
日期和时间类型
- 日期和时间类型为
DATETIME
、DATE
、TIMESTAMP
、TIME
和YEAR
- 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MlySQL不能表示的值时使用"零"值。
字符串类型
- 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
- CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。
- BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。
- BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
- 有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。
char 和 varchar 的区别:(重点)
例如,姓名长度给定为10,使用3个字符。 - char中剩余的空间不会释放,系统会用空格给填充满;
- varchar中会将剩余的7个字符空间释放。
数据库建表方式和原则
创建表
语法:
create table 表名 (
属性名1 数据类型 [约束条件],
字段名2 数据类型 [约束条件],
列名3 数据类型 [约束条件]
);
切换数据库:use 库名
[]
中括号中的内容是可选可不选内容,最后一个属性后没有逗号
单行注释:--
;多行注释:/* */
。
打开表:查看是否存入数据;设计表:查看表结构
删除表
语法:drop table 表名1, 表名2, 表名3..., 表名n;
修改表
- 添加列(属性)
alter table 表名 add 属性名 数据类型;
- 删除列(属性)
alter table 表名 drop 属性名;
- 修改属性∶
alter table 表名 modify 属性名 新数据类型;
- 修改字段名∶
alter table 表名 change 旧字段名 新字段名 (新)数据类型;
同时也可以修改数据类型。
显示表
查看表结构:desc 表名;
注:数据库sql语句通常答案不唯一,无标准答案。刷新时刷新库
练习:
- 自己动手使用工具创建一张表并插入一条数据。
数据的完整性
数据的完整性指存储在数据库中的数据应该保持准确性和可靠性。如出现学号相同的数据就是不准确的。
关于Key
- 如果Key是
空
,那么该列值的可以重复,表示该列没有索引,或者是一个非唯一的复合索引的非前导列; - 如果Key是
PRI
,那么该列是主键的组成部分; - 如果Key是
UNI
, 那么该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL); - 如果Key是
MUL
, 那么该列的值可以重复, 该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL。
如果对于一个列的定义,同时满足上述4种情况的多种,比如一个列既是PRI,又是UNI,那么desc 表名
的时候,显示的Key值按照优先级按照PRI>UNI>MUL规则。那么此时,显示PRI。
一个唯一性索引列可以显示为PRI,并且该列不能含有空值,同时该表没有主键。一个唯一性索引列可以显示为MUL,如果多列构成了一个唯一性复合索引,因为虽然索引的多列组合是唯一的。
实体完整性
- 实体完整性是对关系中的记录唯一性。
- 定义表中的所有行有唯一的标识。
- 表中主属性(字段)不能为null且不能有相同值。
- 一般用主键、唯一索引、unique关键字来实现。
实体完整性之主键约束 primary key
- 主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。
- 创建表时指定主键。
- 一个表中有且只有一个主键约束。
- 创表,并设置主键
PK_主键约束名
create table 表名 ( -- 格式一 : 通用格式(即多种数据库都可使用MySQL、Oracle等)
列名 数据类型 primary key,
列名2 数据类型
);
create table student ( -- 举例格式一
id varchar(10) primary key, -- 若学号重复或为空,不可保存会报错
name varchar(10),
age int
);
create table 表名 ( -- 格式二
列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key (列名)
);
create table student ( -- 举例格式二
id varchar(10),
name varchar(10),
age int,
constraint pk_id primary key(id)
);
create table 表名 ( -- 格式三
列名1 数据类型,
列名2 数据类型,
primary key(列名)
);
create table student ( -- 举例格式三
id varchar(10),
name varchar(10),
age int,
primary key(id)
);
- 已存在的表,添加或修改主键:
alter table 表名 modify 列名 数据类型 primary key; -- 格式一
alter table 表名 add