关系型数据库Mysql

关系型数据库

基础知识:

  1. 数据库(DB):保存有组织的数据的容器。

  2. 数据库管理系统(DBMS):创建和操纵数据的容器。

  3. 数据库系统(DBS):DB+DBMS(含应用开发工具)+应用程序+数据库管理员(DBA)

  4. 数据模型:数据库的类型是根据数据模型来划分的,DBMS也是针对它进行设计的。

DBMS代表数据库管理系统,数据库是数据的集合,管理系统是一组用于存储和检索这些数据的程序;因此DBMS是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。 常见的有:Mysql, Oracle ,Sybase等。

关系模型:

关系 (Relation) :一个关系对应一张表;

元组 (Tuple) :表中一行为一个元组;

属性(Attribute):表中一列为一个属性,给每一个属性起一个名称即属性名;

码(Key) :唯一确定一个元组的属性或属性组;

域(Domain) : 针对属性的取值范围集合 ,是一组具有相同数据类型的值的集合。 比如性别取值为男、女、学号的长度为8位等, 所有的域都是原子数据(Atomic Data) ;

目或度(Degree):R表示关系的名字,n是关系的目或度;

分量:元组中的一个属性值;

候选码(Candidate Key):如果关系中的某一属性或属性组的值能唯一的标识一个元组,称为该属性或属性组为候选码。

主码(Primary Key):主键,如果一个关系有多个候选码,则选定一个作为主码。 可以人为选定一个键作为一张表的主键。一张表可以没有主键。选定为主键的那一列数据里面不能出现空值(NULL),且要满足作为键的条件。

主属性(Prime Attribute):包含任何候选码中的属性称为主属性,不包含任何候选码的属性称为非主属性。

外码(Foreign Key):关系模式R中的属性或属性组非该关系的码,但他是其他关系的码,那么该属性集对关系模式R而言是外码,也称为外键。 用于强制约束表与表之间的联系

全码(ALL-key):关系模型的所有属性组是这个关系模式的候选码,称为全码。

关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,……,属性n)学生(学号,姓名,年龄,性别,系,年级);

注意规范:不能出现大表套小表。

基本关系:实际存在的表,是实际存储数据的逻辑表示。

查询表:查询结果对应的表。

视图表:由基本表或其他视图表导出的表,本身不独立存储在数据库中,数据库中只是存放定义,所以又称为虚表。

数据库系统模式:

型:对某一类数据的结构和属性的说明,(学号,姓名,性别,系别,年龄,籍贯);

值:是型的一个具体赋值,(201315130,李明,男,计算机,19,江苏);

模式:模式是相对稳定的,即属性名的集合;

实例:模式的一个具体值,反映数据库某一时刻的状态,同一个模式可以有很多实例,实例随数据库中的数据的更新而变动

例子:对于成绩单,科目的那一行表示的是模式,每一个人的成绩一行表示一个实例。

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

模式:数据库中全体数据的逻辑结构和特征的描述,所有用户的公共数据视图,综合了所有用户的需求,一个数据库只有一个模式,模式是相对稳定的,但是实体是相对变动的;

外模式:模式的子集,一个数据库可以有多个,是数据库中局部数据的逻辑结构和特征的描述;

内模式:1)是数据物理结构和存储方式的描述;2)是数据在数据库内部的表示方式,一个数据库只有一个内模式。

Mysql

练习网站: SQL Fiddle

select 需要展示的字段,* 代表全部字段

from 从哪一张表展现

where 后面跟着一些过滤条件,多个过滤条件使用 and / or 来连接

order by 根据某几个字段来排序,后面跟着ACS代表升序,DESC代表降序

limit 最多展示多少行数据。使用limit是一个好习惯,不然可能会不小心一次性展示几百万条数据。

建表:

CREATE TABLE `student_info` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id,主键',
  `student_name` varchar(50) COMMENT '学生姓名',
  `student_age` int COMMENT '学生年龄',
  `student_sex` varchar(10) COMMENT '学生性别',
  `class_name` varchar(20) COMMENT '所在班级',
  PRIMARY KEY (`id`)
);
​
INSERT INTO `student_info`
(`student_name`, `student_age`,`student_sex`,`class_name`)
VALUES
('葛尧', 8 , '男', '1班')
;
INSERT INTO `student_info`
(`student_name`, `student_age`,`student_sex`,`class_name`)
VALUES
('XH', 19 , '男','2班')
;
INSERT INTO `student_info`
(`student_name`, `student_age`,`student_sex`,`class_name`)
VALUES
('QHR', 24 , '男','3班')
;
​
INSERT INTO `student_info`
(`student_name`, `student_age`,`student_sex`,`class_name`)
VALUES
('GG', 22 , '女','1班')
;
INSERT INTO `student_info`
(`student_name`, `student_age`,`student_sex`,`class_name`)
VALUES
('GYX', 17 , '女','2班')
;
INSERT INTO `student_info`
(`student_name`, `student_age`,`student_sex`,`class_name`)
VALUES
('WR', 9 , '女','3班')
;

常用函数:

  • 求和:sum()

对数字进行sum,不能对名字、班级这些文字进行求和。

select 
 sum(`student_age`) as '年龄和'
from `student_info`
where `student_sex`='女'
;
  • 求个数:count(任意)

select 
 count(1) as '成年男学生数目'
from `student_info`
where `student_sex`='男' and `student_age` > 17
;
  • 求平均:avg()

select 
 sum(`student_age`)/count(1) as '使用多个函数组合求成年男学生平均年龄',
 avg(`student_age`) as '使用avg函数求成年男学生平均年龄'
from `student_info`
where `student_sex`='男' and `student_age` > 17
;
  • 子查询

需求: 列出所有的,女性人数小于2的门派

SELECT 
  *
FROM
(
  SELECT 
    `student_class` as '门派',
    `student_sex`,
    count(1) as '人数'
  FROM
    `student_info`
  GROUP BY
    `student_class`, `student_sex`
  ORDER BY
    `人数` DESC, `门派`
) son_result
WHERE
  son_result.`student_sex` = '女' and son_result.`人数` < 2
;

E-R模型

基本要素包括实体集和联系

  • 实体集&属性(矩形): 描述数据内部结构,具有相同属性的实体具有相同的特征和性质

  • 联系集(菱形及连线): 描述外部结构,联系也称关系,在信息世界中反映实体内部或实体之间的联系

常见的联系集类型(映射基数)分为一对一(1:1)、一对多(1:n)和多对多(m:n)

建图:第一种是从需求分析阶段得到的数据流图(DFD)和数据字典(DD)来建立模型;第二种是根据对现实世界的理解,直接进行建模。

关系型数据库Mysql_第1张图片

关系型数据库Mysql_第2张图片

我们将其转换为关系模式如下:

商店(商店编号,店名,店址,店经理)

商品(商品编号,商品名,单价,产地)

职工(职工编号,职工名,性别,工资)

销售(商店编号,商品编号,月销售量)

服务(商店编号,职工编号,参加工作时间)

你可能感兴趣的:(数据库,java,服务器)