数据库概念概述
数据库的4个基本概念,数据、数据库、数据管理系统和数据库系统是与数据库技术密切相关的概念。
- 数据:描述事物的符号记录称为数据。描述数据的符号可以是多种的,数字,文字,图像,音频、视频等,数据的多种表现形式都经过数字化后存入计算机。
- 数据库:存储数据的仓库。数据库具有长期存储在计算机内,有组织的,可共享的大量数据集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。概括讲,数据库具有永久存储、有组织和可共享三个基本特点。
- 数据库管理系统:是位于用户与操作系统之间的数据管理软件。
- 数据库系统:是由数据库、数据库管理系统、应用程序和数据库管理人员组成的存储、管理、处理和维护数据的系统。
数据模型
数据模型是对现实世界数据特征的抽象,是用来描述数据、组织数据和对数据进行操作的。数据模型是数据库系统的核心和基础。第一类是概念模型,也称信息模型,它是按照用户观点对数据和信息建模,主要用于设计数据库、第二类是逻辑模型和物理模型,它是按照计算机系统观点对数据建模,主要用于数据库管理系统的实现。通过数据模型将现实世界抽象为信息世界,然后将信息世界转化为机器世界。数据模型通常由数据结构,数据操作和数据的完整性约束条件三部分组成。
- 数据结构:描述数据库的组成对象以及对象与对象之间的联系。数据结构是所描述的对象类型的集合,是对系统静态特性的描述。
- 数据操作:是指对数据库各种对象的实例允许执行的操作集合,包括操作及有关的操作规则。简单理解为数据的增删改查,数据定义的修改等操作
- 数据的完整性约束条件:是数据定义的一组完整性规则。简单理解为哪些是必须的字段,数据类型匹配,唯一性,不为空等
关系模型
关系模型是最常用的一种数据库模型,因此,我们在这里对它的数据结构进行详细的剖析。
|---------|-----|----|----|-----|------|
| 学号 | 姓名 | 年龄 | 性别 | 系名 | 年级 |
| 2017004 | 王小二 | 20 | 男 | 计算机 | 2017 |
| 2014005 | 张三 | 23 | 女 | 土木 | 2014 |
[学生登记表]
关系(表):一个关系对应通常说的是一张表(学生登记表)
元组(记录行):表中的一行即为一个元组
属性(列):表中的一列为一个属性
码:也称为码键,表中某一个属性组可以唯一确定一个元组,也就是本关系的码。(key 具有唯一性)
域(值的范围):具有相同数据类型的值集合。如年龄的域值为(1~120),性别的域为(男,女),系名的域(一个学校所有的系的集合)
分量(记录中的某一个值):元组中的一个属性值
数据库系统的三级模式结构
数据库系统的三级模式结构指数据库系统是由外模式、模式和内模式三级构成。
- 模式(逻辑模式):模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
- 外模式(用户模式):它是数据库用户(包含应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一个应用有关的数据的逻辑表示。外模式是保证数据安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。
- 内模式(存储模式):也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。如记录的存储方式是对存储还是按照某些属性值的升降序列进行存储,或按照属性聚簇存储;索引按照什么方式组织,B+树索引还是hash索引;数据是否压缩存储,是否加密等。
SQL三级模式结构应用:
关系数据库
关系可以有三种类型:
- 基本关系:实际存在的表,它是实际存储数据的逻辑表示;
- 查询表:是查询结果对应的表;
- 视图表:是由基础表或其他视图表导出的表,是一个虚表,不对应实际存储的数据。
基本关系具有以下6条性质:
- 列是同质的:每列的分量都是同一个数据类型,来自同一个域。
- 不同的列可出自同一个域,不同的属性要给予不同的属性名:比如老师和学生的姓名和性别都是属于人这个域,为了避免混淆,对不同属性学生和老师用不同的属性名进行区别,即不同列使用同一个域。
- 列的顺序无所谓:列的顺序无关紧要,因此,新增列的时候一般都放在最后一列。
- 任意两个元组的候选码不能取相同值,即key 具有唯一性
- 行的顺序无所谓:行即元组,是记录关系的一组完整数据,即数据已经存储,顺序可以任意交换,不影响数据的完整性。
- 分量必须取原子值:即每一个分量都必须是不可分的数据项。
表连接:
两个关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。此时,关系R中某些元组有可能在S关系中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃,同时,S关系中某些元组也可能被舍弃。这些被舍弃的元组,称为悬浮元组。

- 非等值连接:即当两个关系某两列(可以进行比较),如上图R关系中的C列和S关系中的E列,均为数字(相同域)。非等值连接,当C<E,所以有上面的连接关系。又由于两个关系是没有共用某一列的,所以具有相同属性名的需要用对应关系名进行区别,如R.B和S.B。
- 等值连接:即两个关系中均有某列可以进行匹配的值,我们在定义关系的时候会通过该属性完成表的连接。如R.B 和S.B ,实例如学生ID,在信息表中有学生ID,在成绩表中有学生ID,我们在完成数据查询时对两个表进行连接时就需要用学生ID完成新的视图,得到一个完整的元组(包含学生信息和成绩一一对应的新视图)。等值连接与自然连接的区别是将等值列用不同的关系定义,而自然连接进行了合并,直接共用一个属性列。
- 自然连接:特殊的等值连接的表达方式,将等值列进行合并共用,即自然连接。
- 外连接(外连接保留所有数据):将悬浮元组均保留,在元组分量中用NULL标记,这种连接方式为外连接。
- 左外连接:只保留左边关系中的悬浮元组,叫做左外连接
- 右外连接:只保留右边关系中的悬浮元组,叫做右外连接

SQL 数据库
SQL 数据库按照三级模式结构,模式、内模式、外模式。其模式、外模式和内模式的基本对象有模式、表、视图和索引等,因此SQL的数据定义功能包括如下图:
以上,作为对整体数据库定义的一个了解内容,在日常的工作中,出开发外其他的同学很少会使用到数据定义。下面将对数据定义进行简单的命令列举。
数据定义:DDL操作(data definition language 的简称,用来定义数据库对象:数据库,表,列等)
模式定义:
-
创建模式,需要获得数据库管理权限或者获得数据库管理员授予的CREATE SCHEM权限; CREATE SCHEMA <模式名/不写默认为用户名> AUTHORIZATION <用户名>
eg:为用户Allan 定义一个学生-课程模式 "S-T"
CREATE SCHEMA "S-T" AUTHORIZATION Allan;
如果省略模式名 "S-T",则默认为用户Allan 定义了一个学生-课程 模式"Allan"。
定义模式实际上是定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,如基本表、视图、索引等,如下,在定义模式的情况下,同步定义table:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]
CREATE SCHEMA TEST AUTHORIZATION Allan
CREATE TABLE Student(
name char(20) AS 名字,
year smallint AS 年级,
No int AS 学号
);
-
删除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
eg:DROP SHEMA Allan CASCADE;
删除Allan 模式的同时,删掉Allan 名空间创建的student 表。删除时选择CASCADE 为级联删除,表示删除模式的同时删除该模式下定义的所有数据库对象;删除时选择RESTRICT 为限制删除,该模式下已经定义了数据库对象,删除语句将被拒绝执行,只有该模式下没有数据时,才能被执行。
创建数据库:
Create database 数据库名
Create database 数据库名 character set 字符集 --默认指定UTF-8
查看/选择数据库:
USE 数据库 --切换数据库
select database(); --查看当前正在使用数据库
show databases; --查看Mysql中有哪些数据库
show create database 数据库名; --查看一个数据库的定义信息
创建表(重点):
Create table <表名>(<列名><数据类型>[列完整性约束],<列名><数据类型>[列完整性约束]...);
sql
/*学生表*/
create table Student(
Sno char(9) primary key, /*列的完整性约束,Sno 作为主键*/
Sname char(20) unique, /*取唯一值*/
Ssex char(2),
Sage samllint,
Sdept char(20)
);
/*课程表*/
create table Course(
Cno char(4) primary key,
Cname char(20) NOT NULL,
Cpno char(4), /*选修课*/
foreign key (Cpno) references Course(Cno) /*表级完整性约束,Cpno 作为外码,被参照表Course,参照列Cno。参照表和被参照表是同一个表*/
);
/*选课表*/
create table SC(
Sno char(9),
Cno char(4),
Grades smallint,
primary key(Sno,Cno) /*主码由Sno和Cno共同构成,必须作为表级完整性进行定义*/
foreign key(Sno) references Student(Sno),/*表级完整性约束条件,Sno是外码,被参照表Student,参照列Sno*/
foreign key(Cno) references Course(Cno)/*表级完整性约束条件,Cno是外码,被参照表Course,参照列Cno*/
);
Create table 表1 like 表2 --创建表结构与表2一样的表1
查看表:
show tables --查看当前database 下有哪些表
Desc 表名 --查看表结构
删除表:
Drop table 表名
Drop table if exsits 表名 --如果存在则删除表
修改表:
Rename table 旧表名 to 新表名 --修改表名
Alter table 表名 Character set 字符集 --修改表编码方式
Alter table 表名 Add 列名 数据类型(长度) --修改表结构,添加列并定义数据类型
Alter table 表名 Modify 列名 数据类型(长度)--修改列的数据类型和长度
Alter table 表名 Change 旧列名 新列名 数据类型(长度)--修改列名,数据类型和长度
Alter table 表名 Drop 列名 --修改表结构,删除列