1 | # 01-15python基础 |
Python100天学习31-35
Linux
Python100天学习36-40
MySQL
关系数据库产品
- Oracle - 目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库,它实现了分布式处理的功能。在 Oracle 最新的 12c 版本中,还引入了多承租方架构,使用该架构可轻松部署和管理数据库云。
- DB2 - IBM 公司开发的、主要运行于 Unix(包括 IBM 自家的 AIX)、Linux、以及 Windows 服务器版等系统的关系数据库产品。DB2 历史悠久且被认为是最早使用 SQL 的数据库产品,它拥有较为强大的商业智能功能。
- SQL Server - 由 Microsoft 开发和推广的关系型数据库产品,最初适用于中小企业的数据管理,但是近年来它的应用范围有所扩展,部分大企业甚至是跨国公司也开始基于它来构建自己的数据管理系统。
- MySQL - MySQL 是开放源代码的,任何人都可以在 GPL(General Public License)的许可下下载并根据个性化的需要对其进行修改。MySQL 因为其速度、可靠性和适应性而备受关注。
- PostgreSQL - 在 BSD 许可证下发行的开放源代码的关系数据库产品。
安装教程
windows
linux
macos
MySQL基本命令
查看命令
- 查看所有数据库
1 | show databases; |
- 查看所有字符集
1 | show character set; |
- 查看所有的排序规则
1 | show collation; |
- 查看所有的引擎
1 | show engines; |
- 查看所有日志文件
1 | show binary logs; |
- 查看数据库下所有表
1 | show tables; |
获取帮助
在 MySQL 命令行工具中,可以使用 help
命令或 ?
来获取帮助,如下所示。
-
查看
show
命令的帮助。1
? show
-
查看有哪些帮助内容。
1
? contents
-
获取函数的帮助。
1
? functions
-
获取数据类型的帮助。
1
? data types
SQL语句
数据库的基本操作
SQL 包含以下 4 部分:
- 数据定义语言(Data Definition Language,DDL)
用来创建或删除数据库以及表等对象,主要包含以下几种命令:
- DROP:删除数据库和表等对象
- CREATE:创建数据库和表等对象
- ALTER:修改数据库和表等对象的结构
- 数据操作语言(Data Manipulation Language,DML)
用来变更表中的记录,主要包含以下几种命令:
- SELECT:查询表中的数据
- INSERT:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
- 数据查询语言(Data Query Language,DQL)
用来查询表中的记录,主要包含 SELECT 命令,来查询表中的数据。 - 数据控制语言(Data Control Language,DCL)
用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对数据库中的用户设定权限。主要包含以下几种命令:
- GRANT:赋予用户操作权限
- REVOKE:取消用户的操作权限
- COMMIT:确认对数据库中的数据进行的变更
- ROLLBACK:取消对数据库中的数据进行的变更
基本语法
- SQL 语句不区分大小写
- SQL 语句中含有字符串的时候,需要像 ‘abc’ 这样,使用英文单引号’将字符串括起来,用来标识这是一个字符串。
- SQL 语句中含有日期的时候,同样需要使用英文单引号将其括起来。日期的格式有很多种(‘26 Jan 2010’ 或者’10/01/26’ 等),统一使用 ‘2020-01-26’ 这种’年-月-日’的格式。
- 在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可。
- SQL 语句要以分号;结尾.在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。
C语言中文网SQL教程
基本操作
1 | -- 查看数据库 ,LIKE可选,不写就是查看全部 |
SQL语句的大小写规则
MySQL 用服务器主机的底层文件系统所包含的目录和文件来表示数据库和表。因此,数据库名和表名的默认大小写取决于服务器主机的操作系统在命名方面的规定。
常见错误
1 | 1 开头 服务器错误 |
数据库设计
数据库设计三个范式
1 | 1.第一范式: 要求任何一张表必须有主键,每一个字段原子性不可再分。 |
MySQL数据类型
1 | 整型:TINYINT(1字节,255) SMALLINT(2字节,65535) MEDIUMINT(3字节,16777214) INT(4字节,4294967295) BIGINT(8字节,) |
系统变量
1 | -- MySQL 中的系统变量以两个“@”开头。 |
MySQL存储引擎
存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。
1 | SHOW ENGINES; |
InnoDB
1.支持事务,实现了4个隔离级别
2.灾难恢复性好,commit rollback crash-recovery
3.行级锁
4.缓存处理
5.支持外键
使用InnoDB时,MySQL会在数据目录(Data )下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。
InnoDB存储引擎和MyISAM不太一样,虽然也有.frm文件来存放表结构定义相关的元数据,但是表数据和索引数据是存放在一起的.至于是每个表单独存放还是所有表存放在一起,用户可以自己设置。
物理存储结构
- 数据文件(表数据和索引数据)
数据文件用来存放数据表中的数据和所有的索引数据,包括主键和其他普通索引。
InnoDB存储的数据采用表空间(Tablepace)进行存放设计。表空间是用来存放MySQL系统相关信息的一个特殊共享表空间。
InnoDB的表空间分为以下两种形式∶
共享表空间,表数据和索引都存放在同一个表空间。默认的表空间文件就是上面所提到的MySQL初始化路径下的 ibdata1文件。
独立表空间,每个表的数据和索引被存放在一个单独的.ibd文件中。 - 日志文件
默认情况下,InnoDB存储引擎的数据目录下会有两个名为ib_logfile0和ib_Jogfile1的文件。在MySQL官方手册中将其称为InnoDB存储引擎的重做日志文件( redo log file )。
重做日志文件对InnoDB存储擎至关重要。InnoDB可以通过重做日志将数据库宕机时已经完成但还没有来得及将数据写入磁盘的事务恢复,也能将所有部分完成并已经写入磁盘的末完成事务回滚,并且将数据还原,以此来保证数据的完整性。
每个InnoDB存储引擎至少有1个重做日志文件组 ( group ),每个文件组下至少有2个重做日志文件,如默认的ib_Jogfile0和ib_logfile1。
MyISAM
优
占用空间小
访问速度快,对事务完整性没有要求或以SELECT、INSERT为主的应用基本上都可以使用这个
引擎来创建表可以配合锁,实现操作系统下的复制备份
支持全文检索(InnoDB在MySQL 5.6版本以后也支持全文检索)数据紧凑存储,因此可获得更
小的索引和更快的全表扫描性能。
MyISAM对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时对表加排他锁。但是在表有读取查询的同时也可以往表中插入新的记录(这被称为并发插入)。
三种索引:B-Tree,R-Tree,Full-Text
缺
不支持事务的完整性和并发性
不支持行级锁,使用表级锁,并发性差
主机宕机后,MyISAM表易损坏,灾难恢复性不佳数据库崩溃后无法安全恢复
只缓存索引,数据的缓存是利用操作系统缓冲区来实现的,可能会引发过多的系统调用,且效率不佳
物理存储
MyISAM存储引擎的表在数据库中被存储成3个物理文件,文件名与表名相同。扩展名为frm、MYD和MYI。其中:
frm为扩展名的文件存储表的结构;
MYD为扩展名的文件存储数据,其是MYData的缩写;
MYI为扩展名的文件存储索引,其是MYIndex的缩写。不管表有多少索引,都是存放在同一个.MYT文件中.
不同存储引擎存储的方式
MySQL中的每一个数据表在磁盘上至少被表示为一个文件,即存放着该数据表结构定义的.frm 文件。不同的存储引擎还有其它用来存放数据和索引信息的文件。
从MySQL 8.0版本开始,frm 表结构定义文件被取消,MySQL把表结构信息都写到了系统表空间。