目录
简介
数据库(Database)是按照 数据结构来组织、 存储和管理数据的建立在计算机存储设备上的仓库。
什么是数据库?
又称数据库管理系统(database management system)是一种计算机应用程序或系统,用于长期存储、有组织的、可共享的、可检索数据的、统一管理的大量数据的集合。
具体来说,数据库具有以下特点:
- 长期存储在计算机内。数据库中的数据可以长期保存在计算机中。
- 有组织的。数据库中的数据按照特定的数据结构组织,这种结构有助于管理和检索数据。
- 可共享。数据库中的数据可以被多个用户或应用程序共享使用。
- 数据独立性较高。数据库中的数据与其存储方式、组织方式分离,这有助于数据的移植和更新。
- 易扩展。数据库可以轻松地添加新的数据和功能,以适应不断变化的需求。(数据的查询添加修改和删除)
数据库的种类
主要分为:关系型数据库、非关系型数据库
常用的数据库模型:关系型数据库、非关系数据库
关系型数据库(Relational Database)
是什么?
关系型数据库是一种以二维表来表示关系(行和列)形式存储的结构化数据。
PS:结构化数据以明确的格式和规则存储的数据,可以通过表格、数据库或其他可编程的数据模型进行存储和管理。结构化数据具有明确的字段和属性,每个字段都有特定的数据类型和取值范围。这种类型的数据易于组织、存储和分析,可以通过各种算法和工具进行有效的处理和挖掘。
有哪些?
MySQL、Oracle、SQL Server等
sql语言
SQL的全称是Structured Query Language,是关系型数据库的标准语言,是一种结构化查询语言。具体分为DCL、DDL、DML、DQL四大类。
数据控制语言(DCL)
全称Data Control Language,用来控制对数据的访问权(给用户赋权限限定操作):
- 管理用户,可对数据库用户进行查询、创建、修改、删除操作。
- 权限控制,前提是与用户绑定,给用户赋予对数据库、数据库表、视图、自定义函数、数据增删改查等一系列控制权。
数据描述语言(DDL)
这种语言定义了数据类型,例如创建、更改、删除表或者数据之间的联系。
库的管理
操作 | 语句 | 注意 |
---|---|---|
创建库 | create database 库名 set 编码格式 collate 排序规则; | 编码格式和排序规则可以省略不写 |
查看库 | show databases; | |
修改库 | alter database 原库名称 modify 新库名称; | 也可新建一个库,然后将需要修改的库的数据拉入到新库中 |
删除库 | drop database 库名; |
表的管理
操作 | 语句 | 注意 |
---|---|---|
创建表 | create table 表名(列名 primary key 数据类型 约束,列名 数据类型 约束); | 创建表必须指定字段 |
查看表 | show tables; | |
修改表 | alter table 原表名 rename to 新表名; | |
删除表 | drop table 表名; |
字段的管理
操作 | 语句 | 注意 |
---|---|---|
添加字段 | alter table 表名 add 字段名 数据类型(长度) ; | |
查看字段 | describe 表名; | 显示字段的名称、类型等信息 |
修改字段 | 修改字段名称:alter table 表名 rename 原列名 to 新列名; 修改字段数据类型:alter table 表名 modify column 列名 新数据类型; | |
删除字段 | alter table 表名 drop 字段名; |
约束的管理
作用:对表中字段数据的一种强制限制!
约束(Constraint)的说明
约束名称 | 说明 |
---|---|
主键约束 | 一张表中只能存在一个主键约束,可以由一个或多个字段组成主键约束。(多个字段组成主键称联合主键) |
非空约束 | 确保某一列不接受null值。 |
唯一约束 | 确保表中添加了唯一约束字段列(可以是一个字段也可以是多个字段的组合)上具有唯一的值(每个数据组合只能出现一次,但可以存在多个null值,因为null不等于任何其他值,包括其自身)。 |
检查约束 | 确保插入或更新数据时,数据满足特定的条件(自定义的条件表达式,确保列中的每个值都满足该条件。)。 |
默认约束 | 定义列的默认值。 |
自增约束 | 一个表中只能存在一个自增约束,确保某一列添加null值时,会自动生成下一个序列编号。(通常作用与主键,确保每当添加数据时,该字段会自增) |
外键约束 | 确保两个表之间建立关系时,一张表中的字段与另一张表字段相关联。 |
PS:除主键约束和自增约束外,其它约束在一张表中允许存在多个。
操作 | 语句 | 注意 |
---|---|---|
添加约束 | alter table 表名 add constraint 约束名 约束(列名); | |
查看约束 | select * from information_schema.table_constraints where table_name = 表名; | 不同关系型数据库可能会有差异 |
修改约束 | 先删除约束然后再给字段添加新的约束; | |
添加外键约束 | alter table 从表 add constraint 约束名称 foreign key(外键字段) references 主表(主键字段); | |
添加联合约束 | alter table 表名 add constraint 约束名称 unique (字段1, 字段2); | |
删除约束 | alter table 表名 drop constraint 约束名; |
PS:添加字段完整语句为alter table 表名 add 字段名 数据类型(长度) comment 注释 约束;一个字段允许存在多个约束。
索引的管理
作用:提高查询效率,是一种以空间换时间的方法。
索引( Index)的说明
索引名称 | 说明 |
---|---|
单列索引 | 在单个列上构建的索引。 |
主键索引 | 一种特殊的唯一索引,用于唯一标识表中的每一行。 |
唯一索引 | 保证数据表中的每一行都具有唯一的索引值。 |
组合索引 | 在多个列上构建的索引,可以用于减少查询过程中的数据检索量。 |
全文索引 | 用于MyISAM引擎,用于全文检索,可用于快速匹配文本数据。 |
操作 | 语句 | 注意 |
---|---|---|
创建索引 | alter table 表名 add index 索引名(关联字段); | 关联的字段可以是单个字段也可以是多个字段。 |
查看索引 | show indexes from 表名; | 不同关系型数据库可能会有差异 |
修改索引 | 先删除后重新创建; | |
删除索引 | alter table 表名 drop index 索引名; |
PS:约束与索引是两种不同的东西,索引是一种数据结构,约束是一种规则。表中字段主键约束也是一种特殊的索引。
主键索引的唯一性是通过唯一约束来实现的。主键约束确保了表中每个行的主键值都是唯一的,并且不允许有空值。此外,一个表只能有一个主键。当你在创建表时指定某列为主键,数据库系统会自动为该列创建一个唯一索引,以强制执行这一约束。
数据操作语言(DML)
这种语言一般是为了完成数据的插入、更新或者增减。
语句 | 语法 |
---|---|
添加 | insert into 表名(列名) values(值); insert into 表名(列名) values(值),(值); |
修改 | update 表名 set 字段 = 值 where 条件; |
删除 | delete from 表名 where 条件; |
PS:修改和删除语句记得必须加where条件,否则会出现将整张表的数据修改或删除。
数据查询语言(DQL)
这种语言是用来检索信息或者检索计算机处理后的派生信息。
语句 | 语法 |
---|---|
查询 | select * from 表名; |
语句基本结构
select 列名 from 表名 where 条件 group by 分组列 having 分组条件 order 排序列 limit 显示结果数;
编写顺序
select→distinct→聚合函数→from→join on→where→group by→having→聚合函数→order by→limit。
执行顺序
from→join on→where→group by→聚合函数→having→select→聚合函数→distinct→order by→limit。
SQL三大范式
作用:有助于消除数据冗余和提高数据的一致性
- 第一范式(1NF):强调的是列的原子性,即表中每一列的字段属性都是唯一的,不可再分的。也就是说,数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。
- 第二范式(2NF):在满足1NF的基础上再满足依赖性的两个约束:一张表必须有一个主键;非主键类必须完全依赖于主键,而不能只依赖主键的一部分。也就是说,所有的非主属性都完全依赖于关键字,不存在非主属性对于部分候选关键字的部分依赖,不过允许非主属性之间存在着传递依赖。
- 第三范式(3NF):在满足2NF的基础上再满足一个条件:非主键列必须直接依赖于主键,不能存在传递依赖。也就是说,确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
SQL规则与规范
是什么?
规则表示必须遵守,规范表示建议遵循。
规则
- 数据库、表名不得超过30个字符,变量名限制为29个
- 必须只能包含 A–Z, a–z, 0–9, _共63个字符
- 数据库名、表名、字段名等对象名中间不要包含空格
- 同一个连接中,数据库不能同名;同一个库中,表不能重名同一个表中,字段不能重名
- 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
规范
- sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。
- 连接符or、in、and、以及=、<=、>=等前后加上一个空格。
- 对较为复杂的sql语句加上注释,说明算法、功能。
- 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。如果某列数据在一个表中表示为某个类型,那么在另一张表中这列就不用改为其它类型。
事务
是什么?
是一个不可再分的逻辑单位,它包含了一系列数据库操作,这些操作要么都成功,要么都失败。
举例:A向B转账500元,如果A余额减少但B余额未增加就会出现问题。事务保证了操作的准确性,如果一个操作失败,事务将会回滚,取消所有操作的影响。
事务的四大特性
又称为ACID特性,ACID特性是引擎对于数据库的实现方式。不同的引擎可能对ACID特性的支持程度有所差异。
- 原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么全部执行,要么全部不执行,确保事务内的操作要么全做,要么全不做。
- 一致性(Consistency):指事务的执行必须使数据库从一个一致性状态转换到另一个一致性状态,也就是说一个事务执行之前和执行之后(数据)都必须处于一致性状态。
- 隔离性(Isolation):指多个事务并发执行时,每个事务之间是相互隔离的,互不干扰,确保并发执行的事务之间不能互相干扰。
- 持久性(Durability):指一旦事务提交,对数据库的改变就是永久的,接下来的其他操作或故障不应该对其有任何影响。
事务的隔离级别
定义了并发事务之间相互隔离的程度,以确保数据的一致性和完整性。以下是四种主要的隔离级别
- 读未提交(Read Uncommitted)。最低的隔离级别,允许读取到其他事务未提交的数据,可能导致脏读、不可重复读和幻读等问题。
- 读已提交(Read Committed)。事务只能读取已经提交的数据,可以避免脏读,但仍可能遇到不可重复读和幻读。
- 可重复读(Repeatable Read)。保证在事务执行过程中,多次读取相同数据时,数据不会被其他事务修改,从而避免脏读和不可重复读,但仍可能出现幻读。
- 串行化(Serializable,序列化)。最高的隔离级别,事务按顺序依次执行,完全避免脏读、不可重复读和幻读,但会显著降低系统并发性能。
非关系型数据库(NoSQL Database)
是什么?
是一种非结构化数据,采用键值对、列模型或文档类模型等不同的数据存储方式。非关系型数据库的特点包括读写性能高、易于扩展,但可能不太安全,因为数据通常存储在内存中,断电可能导致数据丢失。
有哪些?mongodb、redis等
数据库存储引擎
是什么?
数据库引擎是用于存储和管理数据的核心组件,不同的数据库引擎具有不同的特点和适用场景。
决定了数据如何存储在磁盘上以及如何从磁盘上检索数据
PS:当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件。
常见数据库引擎
InnoDB
支持事务处理(提交\回滚\崩溃恢复)、行级锁定和外键约束,适合于需要事务完整性和并发控制的应用场景,如在线交易系统。InnoDB将数据和索引存储在单独的文件中,并使用缓冲池管理数据以提高性能。它还支持MVCC(多版本并发控制)以提高数据一致性和读取性能。
PS:MySQL数据库的默认存储引擎。
MyISAM
Oracle
MongoDB
以下为待写引擎
rdb
aof
redis中使用