数据库
使用数据库的意义——->为什么要使用数据库?
- 支持多用户环境,允许用户并行访问和操作数据
- 支持加密技术、提供安全性保证
- 支持为不同用户设置不同权限
- 数据联表查询
相关概念
- DBMS
- RDBMS
- NoSQL
即Database Management System, 数据库管理系统
即Relational Database Management System, 关系型数据库
即not only SQL, 非关系型数据库
- DBA
- 负责数据库的建立、调整、重构
- 负责数据的完整性、安全机制、查询和优化等服务
即Database Admin, 数据库管理员
关系型数据库
RDBMS是所有现代数据库系统的基础代表:MySQL、SQLserver、Oracle等数据存储在被称为表(table)的数据库对象中表是由相关的数据项的集合,由行和列组成关系型数据结构——以二维表形式存储数据即: RDBMS – database – table - row | column
非关系型数据库
- 优势:
支持存储更多的格式:key-value形式、文档形式、列存储等,更灵活善于处理海量数据的维护和处理速度快、效率高,可用硬盘或随机存储器作为载体扩展简单、高并发、稳定、成本低
- 种类:
键值存储:Redis 每个单独的项都存储为键值对面向文档:MongoDB 每个键与称之为文档的复杂数据结构配对宽列存储:HBase 将数据列存储、取代行
关系型数据库——MySQL
历史:最早可追溯到1979年,作为很底层的面向报表的存储工具而诞生 1996年1.0版本发布、2003年5.0版本发布 2009年Oracle收购sun公司,发布5.5版本、添加较多新特性 2016年Oracle跳过5.x命令系列、抛弃6和7分支,直接进入MySQL8版本 2018年8.0发布
版本社区版:开源、免费版,不提供官方技术支持 企业版:开源、收费版,可以适用30天 集群版:开源、免费版 高级集群版:收费版
数据文件以.frm结尾的文件是表结构文件.MYD结尾的文件是当前数据库数据文件.MYI结尾的文件是当前数据表索引文件
存储引擎MyISAM是mysql最开始时的默认存储引擎 InnoDB是5.5版本之后的默认存储引擎 Memory是内存式数据库
SQL语法
即Structure Query Language,结构化查询语言
特点
对语句关键字忽略大小写
对数据库名和表名严格区分大小写
对列名、列名别名忽略大小写
对变量名严格区分大小写
每句语句后面需有;结尾
分类
- DDL
即Data Definition Language,数据定义语言
- DML
即Data Manipulation Language,数据操作语言
- DQL
即Data Query Language,数据查询语言
- DCL
即Data Control Language,数据控制语言
MySQL索引
- 域完整性:指表中列的完整性,需要满足特定的数据类型或约束
- 非空约束、默认值约束
- 实体完整性:指表中行的完整性,主要保证操作记录的非空、唯一且不重复
- 主键约束、唯一键约束
- 表间完整性:指表间的完整性,主要用于保证两表数据的一致性
- 表间约束
- 主键索引——也被称为
聚簇索引
- 唯一键索引——也被称为
非聚簇索引、辅助索引
索引存储的key-value: 聚簇索引的key是主键的值、value是该行的记录 非聚簇索引的key是索引列的值、value是该行的主键的值使用聚簇索引查询 - 直接找到相应的数据 使用非聚簇索引查询 - 聚簇索引 - 找到对应的数据
多表联查
表间的连接
(1(2)3)
内连接:inner join => 2
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
左连接:left join => 1、2
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。当右表中没有匹配的行时,相关列将显示为 NULL。
右连接:right join => 3、2
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。当左表中没有匹配的行时,相关列将显示为 NULL。
表间的关系
- 表关系
一对一
一对多
多对多
- 表示成E-R图
事务
在 MySQL 中,事务是一组SQL语句的执行,它们被视为一个单独的工作单元。
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
- 事务用来管理 insert、update、delete 语句
- 事务必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)
python_mysql_transction_management-e1530354220769
ACID
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。