数据库系统原理【二】

上一篇:数据库系统原理【一】

文章目录

  • 第三章:数据库设计
    • 1.数据库设计概念
        • 1)数据库的生命周期
        • 2)数据库设计的目标
        • 3)数据库设计的内容
        • 4)数据库设计的方法
            • a. 直观设计法
            • b.规范设计法
            • c.计算机辅助设计法
        • 5)数据库设计的过程
    • 2.数据库设计的基本步骤
        • 1)需求分析
          • 需求分析的四个工作步骤:
        • 2)概念结构设计
          • 概念模型:
            • 1.实体分析法(自顶向下法)
            • 2.属性综合法(自底向上法)
        • 3)逻辑结构设计
        • 4)物理设计
        • 5)数据库实施
        • 6)数据库运行与维护
    • 3.关系数据库设计方法
        • 1)E-R图的表示方法
        • 2)概念结构设计方法
          • a.局部信息结构设计
          • b.全局信息结构设计
          • c.逻辑结构设计方法
          • d.数据模型的优化
          • e.设计用户子模式
          • f.物理设计方法
  • 第四章:SQL与关系数据库基本操作
    • 1.SQL概述
          • a.什么是SQL
          • b.SQL的特点
          • c.SQL的组成
            • 1.数据定义语言(Data Definition Language,DDL)
            • 2.数据操纵语言(Data Manipulation Language, DML)
            • 3.数据控制语言(Data Control Language, DCL)
            • 4.嵌入式和动态SQL规则
            • 5.SQL调用和会话规则
    • 2.MySQL预备知识
          • a.MySQL使用基础
          • b.MySQL使用基础
          • c.MySQL扩展语言要素
    • 3.数据定义
          • a.数据库模式定义
            • 1.创建数据库
            • 2.查看数据库
            • 3.选择数据库
            • 4.修改数据库
            • 5.删除数据库
          • b.表定义
            • 创建表
            • 更新表
          • c.索引定义
            • 索引的定义:
            • 索引的弊端:
            • 索引的分类:
            • 索引的创建
            • 索引的查看
            • 索引的删除
    • 4.数据更新
          • a.插入数据
          • b.删除数据
          • c.修改数据
    • 5.数据查询
          • a.SELECT语句
          • b.列的选择与指定
            • 1)普通查找
            • 2)定义并使用列的别名
            • 3)替换查询结果集中的数据
            • 4)计算列值
            • 5)聚合函数:
          • c.FROM子句与多表连接查询
          • d.WHERE子句与条件查询
            • 比较运算符
            • 判断范围
            • 判定空值
            • 子查询
          • e.GROUP BY子句与分组数据
          • f.HAVING子句
            • HAVING子句 VS WHERE子句
          • g.ORDER BY子句
          • ORDER BY子句与GROUP BY子句的区别
          • h.LIMIT子句
    • 6.视图
          • a.
          • b.
          • c.
          • d.
          • e.

第三章:数据库设计

1.数据库设计概念

1)数据库的生命周期

数据库系统原理【二】_第1张图片

2)数据库设计的目标

数据库系统原理【二】_第2张图片

3)数据库设计的内容

数据库系统原理【二】_第3张图片

4)数据库设计的方法

a. 直观设计法
  • 最原始的数据库设计方法
b.规范设计法
  • 新奥尔良设计方法:需求分析、概念结构设计、逻辑结构设计、物理结构设计
  • 基于E-R模型的数据库设计方法
  • 基于第三范式的设计方法,是一类结构化设计方法
c.计算机辅助设计法
  • 辅助软件工程工具

5)数据库设计的过程

数据库系统原理【二】_第4张图片
数据库系统原理【二】_第5张图片
数据库系统原理【二】_第6张图片

2.数据库设计的基本步骤

1)需求分析

数据库系统原理【二】_第7张图片

需求分析的四个工作步骤:

数据库系统原理【二】_第8张图片

  1. 确定数据库范围(数据库的第一项工作)
    数据库系统原理【二】_第9张图片
  2. 应用过程分析 -(了解并分析数据与数据处理间的关系)
    数据库系统原理【二】_第10张图片
  3. 收集与分析数据
    在这里插入图片描述
    数据库系统原理【二】_第11张图片
    数据库系统原理【二】_第12张图片
    数据库系统原理【二】_第13张图片
    数据库系统原理【二】_第14张图片
    数据库系统原理【二】_第15张图片
  4. 收集与分析数据(数据约束)
    数据库系统原理【二】_第16张图片
    数据库系统原理【二】_第17张图片

2)概念结构设计

概念模型:
1.实体分析法(自顶向下法)

数据库系统原理【二】_第18张图片

2.属性综合法(自底向上法)

3)逻辑结构设计

数据库系统原理【二】_第19张图片
数据库系统原理【二】_第20张图片

4)物理设计

数据库系统原理【二】_第21张图片

5)数据库实施

数据库系统原理【二】_第22张图片
数据库系统原理【二】_第23张图片

6)数据库运行与维护

为了保证数据库的正常运行。
系统维护中最困难的工作是数据库重组与重构

3.关系数据库设计方法

1)E-R图的表示方法

数据库系统原理【二】_第24张图片
数据库系统原理【二】_第25张图片
数据库系统原理【二】_第26张图片
数据库系统原理【二】_第27张图片
数据库系统原理【二】_第28张图片
数据库系统原理【二】_第29张图片
数据库系统原理【二】_第30张图片

2)概念结构设计方法

a.局部信息结构设计

数据库系统原理【二】_第31张图片
数据库系统原理【二】_第32张图片
数据库系统原理【二】_第33张图片
数据间的联系必须xxx

属性分为标识属性和说明属性。

b.全局信息结构设计

数据库系统原理【二】_第34张图片

c.逻辑结构设计方法

数据库系统原理【二】_第35张图片
数据库系统原理【二】_第36张图片
数据库系统原理【二】_第37张图片

d.数据模型的优化

数据库系统原理【二】_第38张图片

e.设计用户子模式

数据库系统原理【二】_第39张图片

f.物理设计方法

数据库系统原理【二】_第40张图片
数据库系统原理【二】_第41张图片
数据库系统原理【二】_第42张图片

第四章:SQL与关系数据库基本操作

1.SQL概述

a.什么是SQL

数据库系统原理【二】_第43张图片

b.SQL的特点

数据库系统原理【二】_第44张图片

c.SQL的组成

数据库系统原理【二】_第45张图片

1.数据定义语言(Data Definition Language,DDL)

数据库系统原理【二】_第46张图片

2.数据操纵语言(Data Manipulation Language, DML)

数据库系统原理【二】_第47张图片

3.数据控制语言(Data Control Language, DCL)

数据库系统原理【二】_第48张图片

4.嵌入式和动态SQL规则

数据库系统原理【二】_第49张图片

5.SQL调用和会话规则

数据库系统原理【二】_第50张图片

2.MySQL预备知识

a.MySQL使用基础

数据库系统原理【二】_第51张图片

b.MySQL使用基础

数据库系统原理【二】_第52张图片

c.MySQL扩展语言要素

数据库系统原理【二】_第53张图片
数据库系统原理【二】_第54张图片
在这里插入图片描述
数据库系统原理【二】_第55张图片
数据库系统原理【二】_第56张图片
数据库系统原理【二】_第57张图片
全部的:
数据库系统原理【二】_第58张图片
数据库系统原理【二】_第59张图片
还有系统变量。前面加俩个@符号。

数据库系统原理【二】_第60张图片
数据库系统原理【二】_第61张图片
数据库系统原理【二】_第62张图片

3.数据定义

a.数据库模式定义
1.创建数据库
// db_name是你要创建的数据库名字
CREATE DATABASE db_name;
CREATE SCHEMA db_name;

// 进行一些判断及配置
// []里面的内容是可加可不加的
// charset_name请自行选择,比如utf8、gb2312等等
//  | 用于分隔花括号中的选择项
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET [=] charset_name
|[DEFAULT] COLLATE [=] collation_name;
2.查看数据库
// like关键字用于匹配指定的数据库名称;
// where从句用于指定数据库名称查询范围的条件。
SHOW {DATABASES | SCHEMAS}
[LIKE 'pattern' | WHERE expr];
3.选择数据库
USE db_name;
4.修改数据库
ALTER DATABASE db_name
DEFAULT CHARACTER SET gb2312
DEFAULT COLLATE gb2312_chinese_ci;
5.删除数据库
DROP DATABASE [IF EXISTS] db_name;
b.表定义

数据表是关系数据库中最重要、最基本的单位。

创建表

重点概述:
1.一定要确定表中每个字段的数据类型
2.数据表被定义为字段的集合,按行和列的格式来存储的,每一行代表一条记录,每一列代表记录中一个字段的取值。

// TEMPORARY 临时的
// tbl_name 表名
CREATE [TEMPORARY] TABLE tbl_name
(
字段名1 数据类型[列级完整性约束条件][默认值][注释]
[, 字段名2 数据类型[列级完整性约束条件][默认值][注释]]
[, ...]
[, 表级完整性约束条件]
)[ENGINT=引擎类型];

// 示例
CREATE TABLE tbl_name
(
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字段注释内容',
name varchar(50) NOT NULL DEFAULT 'xxx' COMMENT '字段注释内容',
address varchar(255) NULL COMMENT '字段注释内容',
createtime timestamp NOT NULLDEFAULT CURRENT_TIMESTAMP COMMENT '字段注释内容',
PRIMARY KEY(id) // 设置主键
);
更新表

使用ALTER TABLE语句,增加或删减列、创建或取消索引、更改原有列的数据类型、重新命名列或表,更改表的评注和表的引擎类型,为表重新创建触发器、存储过程、索引和外键等。

子句:

  • ADD[COLUMN] 子句
ALTER TABLE tbl_name
ADD COLUMN field_name field_type [{NULL | NOT NULL}] [DEFAULT] [AFTER] [COMMENT];

在这里插入图片描述

  • CHANGE[COLUMN] 子句
    修改表中列的名称或数据类型
ALTER TABLE tbl_name
CHANGE COLUMN old_field_name new_field_name new_field_type [{NULL | NOT NULL}] [DEFAULT] [AFTER] [COMMENT];

在这里插入图片描述

  • ALTER[COLUMN] 子句
    修改或删除表中指定列的默认值。
ALTER TABLE tbl_name
ALTER COLUMN field_name SET DEFAULT 'new default value';
  • MODIFY[COLUMN] 子句
    只修改指定列的数据类型,不会干涉它的列名。
ALTER TABLE tbl_name
MODIFY COLUMN field_name new_field_type;

数据库系统原理【二】_第63张图片

  • DROP[COLUMN] 子句
    删除表中多余的列
// field_name 字段名
ALTER TABLE table_name
DROP COLUMN field_name;
  • 重命名表的俩种方法:
  1. ALTER TABLE… + RENAME[TO]子句
ALTER TABLE tbl_name
RENAME TO new_tbl_name;
  1. RENAME TABLE … TO …;
RENAME TABLE tbl_name TO new_tbl_name;
  • 删除表:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name2]...
[RESTRICT | CASCADE];
  • 查看表:
// 三个语句均可查看。
SHOW COLUMNS FROM tbl_name;
DESCRIBE tbl_name;
DESC tbl_name;

数据库系统原理【二】_第64张图片

c.索引定义
索引的定义:

索引是提高数据文件访问效率的有效方法

索引的弊端:

1.索引是以文件的形式存储的,如果有大量的索引,索引文件可能比数据文件更快达到最大的文件尺寸;
2.索引在提高查询速度的同时,会降低更新表的速度。

索引的分类:
  1. 普通索引 - - INDEX 或 KEY
  2. 唯一性索引 - - UNIQUE
  3. 主键 - - PRIMARY KEY

索引通常被创建成单列索引和组合索引。

索引的创建

1.使用CREATE INDEX 语句创建

CREATE [UNIQUE] INDEX index_name
ON tbl_name(field_name, [, field_name2[, ...]]);

// 示例:在数据库test的表tbl_name上,根据name列前三个字符创建一个升序索引index_name
// 拓展:ASC:升序     DESC:降序
CREATE INDEX index_name
ON test.tbl_name(name(3) ASC);

// 在数据库test的表tbl_name上,根据name列和id列创建一个组合索引index_custom
CREATE INDEX index_custom
ON test.tbl_name(name, id);

2.使用CREATE TABLE语句创建

// 创建新表的同时创建该表的主键
[CONSTRAINT[symbol]] PRIMARY KEY(field_name, ...);

// 创建新表的同时创建该表的索引
{INDEX | KEY}[index_name](field_name, ...);

// 修改表的同时为该表添加唯一性索引
ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name](field_name, ...);

// 创建新表的同时为该表添加外键
ADD [CONSTRAINT [symbol]] FOREIGN KEY (field_name, ...);

3.使用ALTER TABLE语句创建

// 示例:使用ALTER TABLE 语句在数据库test中表tbl_name的name上添加一列非唯一的索引,取名为index_name。
ALTER TABLE test.tbl_name
ADD INDEX index_name(name);
索引的查看
SHOW {INDEX | INDEXES | KEYS}
{FROM | IN} tbl_name
[{FROM | IN} db_name]
[WHERE expr];
索引的删除

1.使用DROP INDEX语句

DROP INDEX index_name ON tbl_name;

2.使用ALTER TABLE语句

ALTER TABLE tbl_name
DROP index_name;

4.数据更新

a.插入数据
// 使用INSERT...VALUES语句插入单行或多行元祖数据
INSERT...VALUES
// 示例:
INSERT [INTO] tbl_name [(col_name,...)]
{VALUES | VALUE}({expr | DEFAULT}, ...),(...),...
// 实操:如果第一个是自动递增的id给0就行了,它会自动递增。设置default会取字段的默认值进行赋值。设置null就是null;
INSERT INTO tbl_name
VALUES(0,'xx',default,null);

// 使用INSERT...SET语句插入部分列值数据
INSERT...SET
// 示例:
INSERT [INTO] tbl_name 
SET field_name = {expr | DEFAULT},
SET field_name2 = {expr | DEFAULT};

// 使用INSERT...SELECT语句插入子查询数据
// 通俗的讲就是将查询到的内容插入到xxx。
INSERT...SELECT
// 注意点:
// 1.要保证列数一致
// 2.要保证数据类型完全一致

b.删除数据
// 使用DELETE语句删除一行或多行数据
DELETE FROM tbl_name
[WHERE where_condition]
[ORDER BY...]
[LIMIT row_count];
c.修改数据
// 使用UPDATE语句修改更新一个表中的数据
UPDATE tbl_name
SET field_name={expr1 | DEFAULT} [{,field_name={expr2 | DEFAULT}}]...
[WHERE where_condition]
[PRDER BY ...]
[LIMIT row_count];

5.数据查询

a.SELECT语句

数据库系统原理【二】_第65张图片
数据库系统原理【二】_第66张图片

b.列的选择与指定
1)普通查找
// 查询tabl_name的field_name1, field_name2字段
SELECT field_name1, field_name2
FROM tabl_name;

// 查询tabl_name的所有字段
SELECT * FROM tabl_name;
2)定义并使用列的别名
column_name [AS] column_alias
// 实操:
SELECT name,address AS dizhi FROM tbl_name;
3)替换查询结果集中的数据
CASE WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
...
ELSE 表达式
END [AS] column_alias
FROM tbl_name;

数据库系统原理【二】_第67张图片

4)计算列值

举个例子:查找数据库mysql_test的表customers中每个客户的cuse_name,cust_sex,以及对cuse_id加上数字100后的值

SELECT cuse_name,cust_sex,cuse_id+100
FROM mysql_test.customers;
5)聚合函数:

COUNT、MAX、MIN等等请自行百度。

c.FROM子句与多表连接查询

由于内容过于重要也因为内容较多,所以单独迁移了一篇文章,请点击观看:
内连接、左外连接与右外连接的区别及作用介绍

d.WHERE子句与条件查询
比较运算符

数据库系统原理【二】_第68张图片

// 示例:在数据库mysql_test的表customers中查找所有男性客户的信息。
SELECT * FROM mysql_test.customers WHERE sex = '男';
判断范围
  • BETWEEN :当查询的过滤条件被限定在值的某个范围时,可以使用关键字 “BETWEEN”
// 示例:在数据库mysql_test的表customers中,查询客户id号在903至912之间的客户信息。
SELECT * FROM mysql_test.customers WHERE id BETWEEN 903 AND 912;
// BETWEEN...AND是包含903和912的。
  • IN:可以指定一个值的枚举表,该表中会列出所有可能的值。
// 示例:在数据库mysql_test的表customers中,查询客户id号是903、906、912的客户信息。
SELECT * FROM mysql_test.customers WHERE id IN(903,906,912);
判定空值
  • field_name IS NULL:查询field_name是空值的。
// 示例:在数据库mysql_test的表customers中,查询客户名字是空的。
SELECT * FROM mysql_test.customers WHERE name IS NULL;
  • field_name IS not NULL:查询field_name不是空值的。
// 示例:在数据库mysql_test的表customers中,查询客户名字不是空的。
SELECT * FROM mysql_test.customers WHERE name IS NOT NULL;

field_name=null;
field_name<=>null;
field_name!=null;
field_name<>null;
这些也可以判断。

子查询

数据库系统原理【二】_第69张图片

  • 子查询 – 结合关键字“IN”使用的子查询
    主要用于判定一个给定值是否存在于子查询的结果集中
// 示例:查询任意所选课程成绩高于80分的学生的学号和姓名信息
SELECT id,name FROM tbl_name1 WHERE
id IN(
SELECT stuId FROM tbl_name2 WHERE
score > 80
);
  • 子查询 – 结合比较运算符使用的子查询
expression {=|<|<=|>|>=|<=>|<>|!=} {ALL|SOME ANY}(subquery)
  • 子查询 – 结合关键字“EXISTS”使用的子查询
    子查询的结果集不为空,则返回TRUE,否者返回FALSE
EXISTS(subquery);
e.GROUP BY子句与分组数据

数据库系统原理【二】_第70张图片

GROUP BY{field_name | expr | position}[ASC|DESC],...[WITH ROLLUP]
// 示例:在数据库mysql_test的表customers中获取一个数据结果集,要求该结果集中分别包含每个相同地址的男性客户人数和女性客户人数。
SELECT address,sex,COUNT(*) AS 'renshu' FROM mysql_test.customers
GROUP BY address,sex;

// 示例:在数据库mysql_test的表customers中获取一个数据结果集,要求该结果集中包含每个相同地址的男性客户人数、女性客户人数、总人数以及客户的总人数。
SELECT address,sex,COUNT(*) AS 'renshu'
FROM mysql_test.customers
GROUP BY address,sex
WITH ROLLUP;
f.HAVING子句
HAVING WHERE condition;
HAVING子句 VS WHERE子句

数据库系统原理【二】_第71张图片

// 示例:在数据库mysql_test的表customers中查找一类客户信息:要求在返回的结果集中,列出相同客户地址中满足客户人数少于3的所有客户姓名及其对应地址。
SELECT name,address
FROM mysql_test.customers
GROUP BY name,address
HAVING count(*) <= 3;
// 上述sql在5.5之前版本的sql是可以的,5.5之后请把GROUP BY后面的name去掉
// 因为5.5版本要求GROUP BY后面必须和SELECT后面内容一致。
g.ORDER BY子句

用来排序

ORDER BY {field_name | expr | position} [ASC | DESC],...;
// 示例:在数据库mysql_test的表customers中依次按照客户姓名和地址的降序方式输出客户的姓名和性别
SELECT name,sex FROM mysql_test.customers
ORDER BY name DESC,address DESC;
ORDER BY子句与GROUP BY子句的区别

数据库系统原理【二】_第72张图片

h.LIMIT子句

数据库系统原理【二】_第73张图片

// 使用LIMIT子句限制被SELECT语句返回的行数
LIMIT {[offset] row_count | row_count OFFSET offset}
// 在数据库mysql_test的表customers中查找从第5位客户开始的3位客户的id号和姓名
SELECT id,name FROM mysql_test.customers
ORDER BY id
LIMIT 4,3;

数据库系统原理【二】_第74张图片

6.视图

a.
b.
c.
d.
e.

你可能感兴趣的:(数据库专栏,成人自考学习笔记,数据库,数据库系统原理,数据库系统)