本文目录导读:
数据库基础一览表
数据库概述
1、定义
- 数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库,它可以将大量的数据进行有效的组织,方便用户进行数据的增删改查等操作,一个电商平台的数据库中存储了商品信息(如商品名称、价格、库存等)、用户信息(如用户名、密码、收货地址等)以及订单信息(如订单号、下单时间、商品列表等)。
图片来源于网络,如有侵权联系删除
2、数据库管理系统(DBMS)
- 数据库管理系统是用于管理数据库的软件系统,它负责对数据库进行创建、维护、操作等,常见的数据库管理系统有MySQL、Oracle、SQL Server、PostgreSQL等,DBMS提供了数据定义语言(DDL)用于创建和修改数据库结构,如创建表、定义字段类型等;数据操作语言(DML)用于对数据进行操作,如插入、删除、更新和查询数据;数据控制语言(DCL)用于控制数据库的访问权限等。
- 以MySQL为例,它是一个开源的关系型数据库管理系统,它具有体积小、速度快、成本低等优点,被广泛应用于互联网企业等,开发人员可以使用SQL(结构化查询语言)语句在MySQL中进行各种操作。
数据模型
1、层次模型
- 层次模型是一种树状结构的数据模型,它将数据组织成一棵倒置的树,每个节点表示一个记录类型,有且仅有一个父节点(除了根节点),这种模型适用于表示具有层次关系的数据,如企业的组织结构(公司 - 部门 - 员工),但是它的缺点也很明显,比如数据的插入、删除和修改操作比较复杂,因为要考虑到节点之间的层次关系;并且它难以表示多对多的关系。
2、网状模型
- 网状模型是一种比层次模型更灵活的数据模型,它允许一个节点有多个父节点,可以更直接地表示多对多的关系,在一个课程 - 学生 - 教师的关系中,一个学生可以选修多门课程,一门课程可以有多个学生选修,同时一门课程可能有多个教师授课,一个教师也可以教授多门课程,但是网状模型的数据结构比较复杂,用户必须熟悉数据库的逻辑结构才能进行操作。
3、关系模型
- 关系模型是目前应用最广泛的数据模型,它以关系(表)的形式来组织数据,表中的每一行称为一个元组(记录),每一列称为一个属性(字段),关系模型建立在严格的数学理论基础之上,具有数据结构简单、操作方便等优点,在一个学生信息表中,可能有学号、姓名、年龄、性别等属性,每个学生的信息就是表中的一个元组,关系型数据库通过关系代数和关系演算等理论来进行数据的查询和操作。
关系型数据库基础
1、表(Table)
- 表是关系型数据库中最基本的组成部分,它是一个二维结构,由行和列组成,创建一个名为“employees”的员工表,其中可能包含“employee_id”(员工编号)、“name”(姓名)、“department”(部门)、“salary”(工资)等列,表中的每一行代表一个员工的具体信息,每一列代表员工信息的一个属性。
2、字段(Field)与数据类型
- 字段即表中的列,每个字段都有其特定的数据类型,常见的数据类型有整数类型(如INT)、小数类型(如DECIMAL)、字符类型(如VARCHAR)、日期类型(如DATE)等,正确定义字段的数据类型非常重要,它不仅影响到数据的存储方式,还影响到数据的操作和查询效率,如果一个字段存储的是人的年龄,那么使用INT类型就比较合适;如果存储的是人的姓名,使用VARCHAR类型比较合适。
3、主键(Primary Key)
- 主键是用于唯一标识表中每一行记录的字段或字段组合,它具有唯一性和非空性的特点,在员工表中,“employee_id”可以作为主键,因为每个员工的编号是唯一的,通过主键可以方便地对表中的特定记录进行查询、更新和删除等操作,如果没有主键,在对表进行操作时可能会出现数据混淆等问题。
4、外键(Foreign Key)
- 外键用于建立表与表之间的关系,它是一个表中的字段,这个字段的值必须在另一个表的主键或唯一键中存在,有一个“orders”订单表和一个“customers”客户表,“orders”表中的“customer_id”字段可以作为外键,它的值必须与“customers”表中的“customer_id”(主键)相对应,这样就可以通过外键来查询某个客户的所有订单等操作。
SQL基础
1、数据定义语言(DDL)
CREATE语句:用于创建数据库、表、视图等数据库对象,创建一个名为“test_db”的数据库可以使用“CREATE DATABASE test_db;”语句,创建一个名为“students”的表可以使用“CREATE TABLE students (student_id INT, name VARCHAR(50), age INT);”语句。
ALTER语句:用于修改已存在的数据库对象的结构,比如要在“students”表中添加一个“gender”字段,可以使用“ALTER TABLE students ADD COLUMN gender VARCHAR(10);”语句。
DROP语句:用于删除数据库对象,如“DROP TABLE students;”可以删除“students”表(前提是表中没有关联的数据或者已经处理好关联关系),“DROP DATABASE test_db;”可以删除“test_db”数据库。
2、数据操作语言(DML)
图片来源于网络,如有侵权联系删除
INSERT语句:用于向表中插入数据,向“students”表中插入一条学生信息“INSERT INTO students (student_id, name, age) VALUES (1, 'John', 20);”。
UPDATE语句:用于更新表中的数据,如果要将“students”表中名为“John”的学生年龄更新为21,可以使用“UPDATE students SET age = 21 WHERE name = 'John';”语句。
DELETE语句:用于从表中删除数据,如“DELETE FROM students WHERE student_id = 1;”将删除“students”表中“student_id”为1的学生记录。
3、数据查询语言(DQL)
SELECT语句:是SQL中最常用的语句,用于从表中查询数据,基本的查询语句如“SELECT * FROM students;”将查询“students”表中的所有记录和字段,可以通过添加条件来进行筛选查询,如“SELECT name, age FROM students WHERE age > 18;”将查询年龄大于18岁的学生的姓名和年龄,还可以使用聚合函数(如SUM、AVG、COUNT等)进行统计查询,SELECT COUNT(*) FROM students;”将统计“students”表中的学生数量。
JOIN操作:用于连接多个表进行查询,常见的连接类型有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN),要查询每个学生的订单信息,可以使用内连接将“students”表和“orders”表连接起来:“SELECT students.name, orders.order_id FROM students INNER JOIN orders ON students.student_id = orders.student_id;”。
数据库设计
1、数据库设计步骤
需求分析:这是数据库设计的第一步,需要与用户或相关业务部门进行沟通,了解业务需求,设计一个图书馆管理系统的数据库,需要了解图书馆的业务流程,包括图书的借阅、归还、读者的注册等流程,以及需要存储哪些信息,如图书信息(书名、作者、出版社等)、读者信息(姓名、联系方式、借阅证号等)、借阅信息(借阅时间、归还时间等)。
概念结构设计:通过需求分析得到的数据需求,进行概念结构设计,通常采用E - R(Entity - Relationship)模型来表示实体和实体之间的关系,在图书馆管理系统中,实体有图书、读者、借阅记录等,图书和读者之间存在多对多的借阅关系,通过借阅记录这个实体来表示这种关系。
逻辑结构设计:将概念结构设计转化为关系模型,将E - R模型中的实体转化为表,实体的属性转化为表的字段,实体之间的关系通过外键等方式在表中体现,在图书馆管理系统中,可能会创建“books”表(包含图书编号、书名、作者等字段)、“readers”表(包含读者编号、姓名、联系方式等字段)和“borrowing_records”表(包含借阅记录编号、图书编号、读者编号、借阅时间、归还时间等字段)。
物理结构设计:根据所选用的数据库管理系统,确定数据库的物理存储结构,如数据的存储方式、索引的创建等,在MySQL中,对于经常查询的字段(如读者表中的借阅证号)可以创建索引来提高查询效率。
数据库实施与维护:创建数据库、表等对象,向数据库中录入初始数据,并在数据库运行过程中进行维护,如数据的备份、恢复、性能优化等。
2、数据库设计范式
第一范式(1NF):要求表中的每一个属性都是不可再分的原子值,一个员工信息表中,如果有一个“address”字段包含了省、市、区等信息,这就不符合1NF,应该将其拆分成“province”、“city”、“district”等字段。
第二范式(2NF):在满足1NF的基础上,要求表中的非主属性完全依赖于主键,在一个订单详情表中,如果主键是“order_id”,表中有“product_name”、“product_price”和“customer_id”等字段,customer_id”与主键“order_id”没有直接的依赖关系(因为一个订单的顾客信息应该在订单表中,而不是订单详情表中),这就不符合2NF。
第三范式(3NF):在满足2NF的基础上,要求表中的非主属性不传递依赖于主键,在一个学生表中,如果有“student_id”(主键)、“name”、“department_id”和“department_name”等字段,department_name”通过“department_id”传递依赖于“student_id”,这就不符合3NF,应该将“department_name”从学生表中移除,放在单独的部门表中。
数据库事务
1、事务的概念
- 事务是一组数据库操作的集合,这些操作要么全部成功执行,要么全部不执行,在银行转账系统中,从一个账户转出一定金额并转入另一个账户的操作就是一个事务,这个事务包括两个操作:从转出账户中扣除金额和向转入账户中增加金额,如果其中一个操作失败(如转出账户余额不足),那么整个事务都应该失败,两个操作都不应该执行,以保证数据的一致性。
2、事务的特性(ACID)
原子性(Atomicity):事务中的所有操作是一个不可分割的整体,要么全部执行成功,要么全部失败回滚,就像在上面的银行转账例子中,转出和转入操作必须作为一个整体来对待。
一致性(Consistency):事务执行前后,数据库的状态必须保持一致,在转账事务中,无论转账成功与否,银行系统的总资金量应该保持不变,并且账户余额的计算也应该正确。
隔离性(Isolation):多个事务并发执行时,每个事务都感觉不到其他事务的存在,各个事务之间相互隔离,有两个用户同时对同一个账户进行操作,一个用户查询账户余额,另一个用户进行转账操作,查询操作应该不受转账操作的影响,并且转账操作也不应该因为查询操作而出现错误。
图片来源于网络,如有侵权联系删除
持久性(Durability):一旦事务提交成功,其对数据库的修改将永久保存,即使系统出现故障也不会丢失,在转账事务成功提交后,即使银行系统突然断电重启,转账后的账户余额也应该是正确的。
3、事务的控制语句(以MySQL为例)
START TRANSACTION语句:用于开始一个事务,在执行转账操作前,可以使用“START TRANSACTION;”语句来开启一个事务。
COMMIT语句:用于提交事务,如果转账操作中的所有操作都成功执行,就可以使用“COMMIT;”语句来提交事务,使转账操作的结果永久保存到数据库中。
ROLLBACK语句:用于回滚事务,如果在转账操作过程中出现错误(如转出账户余额不足),就可以使用“ROLLBACK;”语句将事务回滚到事务开始之前的状态,即转出账户和转入账户的余额都不发生改变。
数据库索引
1、索引的概念
- 索引是一种特殊的数据结构,它可以提高数据库的查询效率,它类似于书籍的目录,通过建立索引,可以快速定位到表中满足查询条件的数据行,在一个包含大量员工信息的表中,如果经常根据员工姓名进行查询,那么可以在员工姓名字段上建立索引,这样,当执行查询语句时,数据库系统就可以直接通过索引快速找到相关的员工记录,而不需要对整个表进行扫描。
2、索引的类型
B - Tree索引:这是一种最常见的索引类型,它以B - Tree(平衡树)的数据结构存储索引数据,B - Tree索引适用于范围查询、精确查询等多种查询类型,在一个按照数字顺序存储的订单表中,如果在订单金额字段上建立B - Tree索引,那么无论是查询某个具体金额的订单,还是查询金额在某个范围内的订单,都可以通过B - Tree索引快速定位到相关的订单记录。
哈希(Hash)索引:哈希索引是通过哈希函数将索引键值映射到一个哈希桶中,哈希索引适用于精确查询,查询速度非常快,但是它不支持范围查询,因为哈希函数的特性使得数据在哈希桶中的存储是无序的,在一个用户登录系统中,如果在用户密码的哈希值字段上建立哈希索引,当用户登录时,通过查询哈希索引可以快速验证用户密码是否正确。
全文索引:全文索引主要用于对文本内容进行搜索,在一个博客文章数据库中,如果要搜索包含某个关键词的文章,就可以使用全文索引,全文索引可以对文章中的文本内容进行分析和索引,从而提高搜索效率,不同的数据库管理系统对全文索引的实现方式有所不同,如MySQL中的全文索引可以通过特定的语法进行创建和使用。
3、索引的创建与使用
- 在数据库中创建索引需要谨慎考虑,因为虽然索引可以提高查询效率,但也会增加数据的存储成本和插入、更新、删除操作的时间成本,在MySQL中,使用“CREATE INDEX index_name ON table_name (column_name);”语句可以创建索引,index_name”是索引的名称,“table_name”是表名,“column_name”是要创建索引的字段名,在查询语句中,数据库系统会自动使用索引(如果查询条件匹配索引)来提高查询速度,如果表中的数据经常发生变化(如频繁的插入、更新、删除操作),过多的索引可能会导致性能下降,因此需要根据实际情况权衡是否创建索引以及创建哪些索引。
数据库安全
1、用户管理与权限控制
- 数据库管理系统通常提供用户管理和权限控制功能,不同的用户可以被授予不同的权限,如查询权限、插入权限、更新权限、删除权限等,在一个企业的数据库中,普通员工可能只有查询部分数据的权限,而数据库管理员则拥有对整个数据库进行操作的权限,在MySQL中,可以使用“CREATE USER 'username'@'host' IDENTIFIED BY 'password';”语句创建用户,然后使用“GRANT privilege_type ON database_name.table_name TO 'username'@'host';”语句授予用户权限,privilege_type”是权限类型,如“SELECT”、“INSERT”等,“database_name”是数据库名,“table_name”是表名,“username”是用户名,“host”是用户的访问主机地址。
2、数据加密
- 为了保护数据库中的敏感数据,数据加密是一种重要的手段,数据加密可以在不同的层次进行,如在存储层对数据进行加密,或者在传输层对数据进行加密,对于存储在数据库中的用户密码等敏感信息,可以使用加密算法(如MD5、SHA - 1等哈希算法或者对称加密算法如AES等)进行加密,这样,即使数据库被非法访问,攻击者也无法直接获取到原始的敏感数据,在传输层,如果数据库客户端和服务器之间进行数据传输,也可以使用SSL/TLS等加密协议来保证数据传输的安全性,防止数据在传输过程中被窃取或篡改。
3、数据库备份与恢复
- 数据库备份是为了防止数据丢失而采取的重要措施,定期对数据库进行备份,可以在数据库出现故障(如硬件故障、软件故障、人为误操作等)时恢复数据,常见的数据库备份方法有完全备份、增量备份和差异备份等,完全备份是对整个数据库进行备份,增量备份是只备份自上次备份(可以是完全备份或增量备份)以来发生变化的数据,差异备份是备份自上次完全备份以来发生变化的数据,在MySQL中,可以使用“mysqldump”命令进行完全备份,如“mysqldump - u root - p database_name > backup_file.sql”,- u root”指定用户名,“- p”表示需要输入密码,“database_name”是要备份的数据库名,“backup_file.sql”是备份文件的名称。
评论列表