数据库的基本概念数据库的基本概念-CSDN博客
1.1 什么是数据库
数据库(database)是用来组织、存储和管理数据的仓库。
当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。
1.2 常见的数据库及分类
市面上的数据库有很多种,最常见的数据库有如下几个:
MySQL 数据库(目前使用最广泛、流行度最高的开源免费数据库;Community + Enterprise)
Oracle 数据库(收费)
SQL Server 数据库(收费)
Mongodb 数据库(Community + Enterprise)
其中,MySQL、Oracle、SQL Server 属于传统型数据库(又叫做:关系型数据库 或 SQL 数据库),这三者的设计理念相同,用法比较类似。
而 Mongodb 属于新型数据库(又叫做:非关系型数据库 或 NoSQL 数据库),它在一定程度上弥补了传统型数据库的缺陷。
数据库的特点?
- 持久化存储数据:数据库允许你将产品信息和订单数据持久地存储在硬盘上。这意味着即使在关机或断电后,数据也不会丢失,并且可以在需要时重新加载。
- 方便数据检索和更新:数据库提供了强大的查询语言和索引功能,使得你可以轻松地检索和更新存储的数据。例如,你可以使用SQL查询语言来查找特定类型的产品,或者更新订单状态为已发货。
- 保证数据完整性:数据库提供了机制来确保数据的完整性。你可以定义约束条件,例如主键约束、唯一约束和外键约束,以防止数据的重复、不一致或无效。
- 保证数据安全性:数据库提供了安全性功能,以确保只有授权用户可以访问数据。你可以设置访问权限和用户身份验证机制,以控制谁可以读取、写入或修改数据库中的数据。
如果我们像平时以变量的形式来存储数据那么会出现什么问题?
变量是有生命周期的,无法持久化存储,数据管理困难(而数据库管理系统解决这个问题),数据共享和多用户访问问题:每个用户都有自己的独立变量,无法共享和同步数据。
而数据库是每个用户在程序中修改数据的时候,数据都会回调给数据库,把数据也给修改,此时其他人看到的数据是从数据库中查询得到了,也就是更改过的。
1.3 传统型数据库的数据组织结构
数据的组织结构:指的就是数据以什么样的结构进行存储。
在传统型数据库中,数据的组织结构分为数据库(database)、数据表(table)、数据行(row)、字段(field)这 4 大部分组成。
除了四大部分外数据库的组成应还有
- 索引:用于快速定位和访问数据的数据结构,可以加快数据检索和查询的速度。
CREATE INDEX idx_customers_name ON Customers (Name); //给予Name索引后, SELECT * FROM Customers WHERE Name = 'John Doe';//用Name来作为判断信息
那么数据库就可以直接定位到索引中名为“John Doe" 的客户姓名匹配的数据行,而不需要对整个表进行全盘扫描。这样可以大大减少查询的时间和资源消耗。
- 视图:基于一个或多个数据表的查询结果集,可以简化复杂的数据查询和提供数据安全性。
视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。
视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
比如select * from books;查询视图
- 存储过程和触发器:用于在数据库中执行特定的操作,如数据处理、验证和约束等。 目前还用不到。
是数据库中的两种重要的编程对象。它们都是预先定义的数据库逻辑,可以在特定的事件或条件发生时自动执行。可以理解为数据库中的一种函数
存储过程是数据库中的一个独立对象,可以被调用和执行。存储过程通常用于封装和组织复杂的业务逻辑,提供重复使用和高性能的数据库操作。比如创建一个存储过程来插入一条新的客户记录,并返回插入后的客户ID:
触发器是与数据库表相关联的代码块,它在特定的数据操作事件(如插入、更新、删除)发生时自动触发执行。
- 数据库管理系统(DBMS):用于管理和操作数据库的软件系统,如MySQL、Oracle、SQL Server等。
用于管理和组织数据库。它提供了一系列的功能和工具,用于创建、操作、维护和查询数据库。
以上所说都是传统型数据库mysql(关系型数据库),之后我们分析一下非关系型数据库和关系型数据库的区分,以便对数据库有一个更好的理解。
关系型数据库 VS 非关系型数据库 - 知乎 (zhihu.com)
关系型数据库是一种基于关系模型的数据库管理系统。在关系型数据库中,数据以表(Table)的形式组织,每个表由行(Row)和列(Column)组成。简单来说,关系模式就是二维表格模型。
2.优点
(1).容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解。
(2)使用方便,通用的sql语句使得操作关系型数据库非常方便。
(3)易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率。、
1.4说一下关系型数据库的事务
数据库就是用来存储数据,那么其中一定有改变数据的时候,事务就是在这个步骤中起作用的。
事务是用来确保无论发生什么情况,你使用的数据都将处于一个合理的状态:
import mysql.connector
# 连接到数据库
conn = mysql.connector.connect(user='username', password='password', host='localhost', database='mydatabase')
# 创建游标对象
cursor = conn.cursor()
try:
# 开始事务
cursor.execute("START TRANSACTION")
# 执行一系列操作
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE account_id = 1") -- 转出账户减去100元
cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2") -- 转入账户加上100元
# 提交事务
cursor.execute("COMMIT")
except Exception as e:
# 发生异常时回滚事务
print("An error occurred:", e)
cursor.execute("ROLLBACK") //回滚事务 ROLLBACK 这样可以撤销之前的所有操作,包括第一个UPDATE语句的修改,从而保证数据的一致性。
finally:
# 关闭游标和连接
cursor.close()
conn.close()
ACID属性是关系型数据库的核心特点之一。
数据库事务必须具备ACID特性,分别是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性
ACID特性确保了数据库事务的正确性、可靠性和一致性。它们提供了事务的基本保证,使得在并发执行和故障恢复的环境下,数据库能够维护数据的完整性和可靠性。
- 原子性(Atomicity):即不可分割性,事务中的操作要么全不做,要么全做 一个事务即使一个原子
- 一致性(Consistency):一个事务在执行前后,数据库都必须处于正确的状态,满足完整性约束 一致性是acid中最重要的属性,而原子性、隔离性和持久性都是作为保障一致性的手段
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行 可以理解为是锁的抢占资源,
- 持久性(Durability):事务处理完成后,对数据的修改就是永久的,即便系统故障也不会丢失
既然关系型数据库这么完美?为什么还要非关系型数据库?
关系型数据库为了规范性,把数据分配成为最小的逻辑表来存储避免重复,获得精简的空间利用。但是多个表之间的关系限制,多表管理就有点复杂。
为了支持更多的并发量,SQL数据采用纵向扩展,提高处理能力,通过提高计算机性能来提高处理能力。
NoSql通过横向拓展,非关系型数据库天然是分布式的,所以可以通过集群来实现负载均衡。 在处理大规模数据和高并发访问时可以方便地在集群中添加更多的节点来处理更大规模的数据和负载。
高性能和低延迟:NoSQL 数据库通过优化数据存储和查询方式,追求更高的读写性能和较低的查询延迟。这对于需要处理大量实时数据和高吞吐量的应用场景非常重要。
非关系型数据库(NoSQL)不使用传统表格关系的数据库,它可以存储和处理非结构化、半结构化和结构化数据。非关系型数据库通常不依赖于SQL语言而是使用其他查询语言或API来操作和检索数据。这些查询语言和API的具体形式取决于所使用的非关系型数据库的类型和厂商。非关系型数据库则更加灵活。它们使用不同的数据模型来存储数据
文档型数据库(例如MongoDB)通常采用通过JSON格式,最适合架构无法定义或频繁更改的非结构化数据
、键值型数据库(例如Redis)、
即内部所有信息都是通过key-value的形式存储的
列族数据库(例如Cassandra)以列族(Column Family)的形式组织和存储数据
图形数据库(例如Neo4j) 数据存储在节点之中
关系型数据库和非关系型数据库各有其优势和适用场景。
关系型数据库适用于需要严格的数据一致性和复杂的查询操作的应用场景,而非关系型数据库则适用于需要处理大量非结构化数据、需要高性能和可扩展性的应用场景。
。这些模型允许你以更自由的方式组织和表示数据。例如,键值对数据库将数据存储为键值对的形式,其中键是唯一标识符,值可以是任意类型的数据。这种结构非常适合快速存储和检索简单的数据,如缓存数据或会话信息
Mysql存储引擎
MySQL存储引擎是一种用于管理数据库表的底层软件组件,是DBMS的一部分。它负责处理数据的存储、检索和操作。比如建表的原理
每种存储引擎都有其特定的功能和性能特点。通过选择合适的存储引擎,用户可以根据自己的需求来优化数据库的性能、可靠性和功能。
常用的存储引擎有
在MySQL的早期版本中,默认的存储引擎是MyISAM,因此在过去的一段时间里,MyISAM是MySQL中最常用的存储引擎之一。然而,自从MySQL 5.5版本开始,InnoDB成为了MySQL的默认存储引擎。随着时间的推移,InnoDB的使用率逐渐增加,并成为目前最常用的存储引擎。
下面我们来举个例子说明InnoDB和MyISAM的区别
1数据的存储结构不同 先看两者再存储上的文件定义
MyISAM InnoDB
我们可以看到在MyISAM中数据和索引是分开。而在InnoDB中的数据和索引是在一个文件中的,
也就是MyISAM中的叶子节点的最终是存储的是地址,然后再根据地址来查找文件, InnoDB的叶子节点都是直接把数据给存储的
2另一个问题是存储空间的消耗不同
MyISAM存储的是静态表、动态表、压缩表 而InnoDB存储空间需要更多的内存和存储 他会在主内存中建立它专有的缓冲池,用来高速缓冲数据和索引,索引InnoDB所在的表都保存在同一个数据文件中
3对事务的支持不同
MyISAM讲究是性能,每次查询都具有原子性,执行速度比InnoDB更快一些,但是不支持事务操作,而InnoDB不仅支持事务,还有外键等一些高级数据库的功能,还有一些日志修复等一些安全设施
4对锁的支持不同
如果支持大量的查询,MySIAM是更好的选择,MyISAM在增删改的时候需要去锁定整个表格,效率低,InnoDB支持行锁,修改哪一行,锁哪一行就行
5对外键的支持不同
前面说过MyISAM是不支持外键的 什么是外键 :外键是用来建立两个表之间的关联的约束,通常用于指定一个表中的数据与另外一个表的数据的关系,其中一个该表,另外一个也会自动改变。确保数据的关联性以及数据的完整性和一致性
【Java面试】技术总监带你剖析,MySQL储存引擎,MyISAM和InnoDB的区别?_哔哩哔哩_bilibili
DBMS跟数据库是什么关系?
数据库管理系统(DBMS)是一个更广泛的概念,它是指用于管理和组织数据库的软件系统。
而数据库是在DBMS下创建和存储数据的集合。
数据库管理系统负责处理数据库的各种操作和管理任务,包括创建数据库、定义表结构、插入和更新数据、执行查询、管理用户权限、处理事务等。它提供了一组功能和工具,使用户和应用程序能够方便地对数据库进行操作,并确保数据的安全性、完整性和一致性。