1、数据库的定义
- 数据库(DataBase,DB)简单来说就是数据的集合
- 数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
- 数据库系统(Database System,DBS)是指基于数据库的计算机应用系统,通常由数据库、数据库管理系统、软件、数据库管理员、用户组成
2、数据库中的一些基本概念
- 元组:元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
- 码:码就是能唯一标识实体的属性,对应表中的列。
- 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
- 主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
- 外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。
- 主属性:候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
- 非主属性: 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。
3、数据库中三范式
- 第一范式(1NF):属性不可再分
- 第二范式(2NF):在1NF的基础上,消除了非主属性对码的部分函数依赖
- 第三范式(3NF):在2NF的基础上,消除了非主属性对码的传递函数依赖
(1) 函数依赖(Functional Dependency)
函数依赖是关系数据库中属性之间的一种约束关系。假设有一个关系模式R(U) ,其中U是属性集合,如果对于U 的一个子集X 和另一个子集Y,满足以下条件:对于R的任意两个元组t和s,只要 t[X] = s[X],就必然有t[Y] = s[Y],那么称Y函数依赖于X,记作。
- 举例:在学生关系表中,假设属性集合为 {学号, 姓名, 年龄, 性别},如果每个学号唯一对应一个学生的所有信息,那么可以表示为学号 -> 姓名, 年龄, 性别。
(2)部分函数依赖(Partial Functional Dependency)
如果在关系模式R(U) 中,存在函数依赖,并且存在X的一个真子集X' ,使得
成立,那么称Y对X是部分函数依赖。
- 举例:假设有一个关系模式R(学号, 课程号, 成绩),其中 (学号, 课程号)是候选键。如果(学号, 课程号) -> 成绩,但同时课程号->成绩也成立,那么成绩 对 (学号, 课程号) 是部分函数依赖。
部分函数依赖会导致数据冗余和更新异常,因此在数据库设计中应尽量避免。
(3) 完全函数依赖(Full Functional Dependency)
如果在关系模式R(U)中,存在函数依赖,并且对于X的任意真子集X',
都不成立,那么称Y对X是完全函数依赖。
- 举例:在关系模式R(学号, 姓名, 年龄)中,假设学号->姓名, 年龄。因为姓名和年龄不能被学号的任何真子集决定,所以姓名和年龄对学号是完全函数依赖。
完全函数依赖是数据库设计中期望的依赖关系,因为它可以减少数据冗余和更新异常。
(4) 传递函数依赖(Transitive Functional Dependency)
在关系模式R(U)中,如果存在函数依赖和
,并且Y不是X 的子集,同时X 不能直接决定Z,那么称Z对X是传递函数依赖。
- 举例:假设有一个关系模式R(学号, 班级, 班主任),其中学号->班级和班级 \rightarrow 班主任,但学号不能直接决定班主任,那么班主任对学号是传递函数依赖。
传递函数依赖也会导致数据冗余和更新异常,因此在数据库设计中,通常需要通过规范化(如第三范式)来消除传递函数依赖。
4、数据库语言
1. 数据库定义语言(DDL,Data Definition Language)
数据库定义语言用于定义和管理数据库的结构,包括创建、修改、删除数据库中的各种对象(如表、视图、索引、约束等)。DDL操作直接影响数据库的模式(schema)。
常见的DDL语句:
sql">1. CREATE(创建)
- 创建数据库:CREATE DATABASE database_name;
- 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);
- 创建索引:CREATE INDEX index_name ON table_name (column);
- 创建视图:CREATE VIEW view_name AS SELECT columns FROM table_name WHERE condition;
2. ALTER(修改)
- 修改表结构,例如添加或删除列:
ALTER TABLE table_name ADD COLUMN column_name datatype;
ALTER TABLE table_name DROP COLUMN column_name;
- 修改列的数据类型:
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
3. DROP(删除)
- 删除数据库:DROP DATABASE database_name;
- 删除表:DROP TABLE table_name;
- 删除索引:DROP INDEX index_name;
- 删除视图:DROP VIEW view_name;
4. TRUNCATE(清空)
- 清空表中的所有数据,但保留表结构:
TRUNCATE TABLE table_name;
特点:
- DDL操作通常会导致数据库结构的永久性变化。
- DDL语句在执行时通常会隐式提交事务,不可回滚。
2. 数据库操作语言(DML,Data Manipulation Language)
数据库操作语言用于操作数据库中的数据,包括插入、更新、删除数据。DML操作直接影响数据库中的数据实例,但不改变数据库的结构。常见的DML语句:
sql">1. INSERT(插入)
- 向表中插入数据:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
2. UPDATE(更新)
- 修改表中的数据:
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
3. DELETE(删除)
- 删除表中的数据:
DELETE FROM table_name WHERE condition;
4. MERGE(合并)
- 在某些数据库系统中,`MERGE`语句用于根据条件插入或更新数据:
MERGE INTO target_table t
USING source_table s
ON (t.id = s.id)
WHEN MATCHED THEN
UPDATE SET t.column = s.column
WHEN NOT MATCHED THEN
INSERT (column1, column2)
VALUES (s.column1, s.column2);
特点:
- DML操作可以被事务控制(如提交或回滚)。
- DML是数据库中最常用的语言,用于日常的数据操作。
3. 数据库查询语言(DQL,Data Query Language)
数据库查询语言是DML的一个子集,专门用于从数据库中检索数据。DQL的核心是`SELECT`语句,它是数据库中最常用的操作之一。
常见的DQL语句:
sql">1. SELECT(查询)
- 基本查询:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- 查询所有列:
SELECT * FROM table_name;
- 带条件的查询:
SELECT column1, column2
FROM table_name
WHERE column1 = value AND column2 > value;
- 聚合查询:
SELECT COUNT(*), AVG(column), SUM(column), MAX(column), MIN(column)
FROM table_name
WHERE condition
GROUP BY column;
- 多表连接查询:
SELECT t1.column1, t2.column2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
WHERE condition;
特点:
- DQL的核心是`SELECT`语句,用于从数据库中检索数据。
- 查询操作不会修改数据库中的数据,只是返回结果集。
- 查询语言支持复杂的逻辑,如条件过滤、分组、排序、连接等。
到这里我们就介绍完数据库的相关理论知识,从整体上把握了数据库,接下来介绍MySQL
记得给个小心心♥~