python100天31-40

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 01-15python基础

# 16-20python进阶

# 21-30前端概述

# 31-35Linux

# 36-40MySQL

# 41-55Django

# 56-60FaskAPI

# 61-65爬虫与并发编程

# 66-80numpy&pandas

# 81-90机器学习&pytorch

# 91-100项目

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. 查看所有数据库
1
show databases;
  1. 查看所有字符集
1
show character set;
  1. 查看所有的排序规则
1
show collation;
  1. 查看所有的引擎
1
show engines;
  1. 查看所有日志文件
1
show binary logs;
  1. 查看数据库下所有表
1
show tables;

获取帮助

在 MySQL 命令行工具中,可以使用 help命令或 ?来获取帮助,如下所示。

  1. 查看 show命令的帮助。

    1
    ? show
  2. 查看有哪些帮助内容。

    1
    ? contents
  3. 获取函数的帮助。

    1
    ? functions
  4. 获取数据类型的帮助。

    1
    ? data types

SQL语句

数据库的基本操作

SQL 包含以下 4 部分:

  1. 数据定义语言(Data Definition Language,DDL)
    用来创建或删除数据库以及表等对象,主要包含以下几种命令:
  • DROP:删除数据库和表等对象
  • CREATE:创建数据库和表等对象
  • ALTER:修改数据库和表等对象的结构
  1. 数据操作语言(Data Manipulation Language,DML)
    用来变更表中的记录,主要包含以下几种命令:
  • SELECT:查询表中的数据
  • INSERT:向表中插入新数据
  • UPDATE:更新表中的数据
  • DELETE:删除表中的数据
  1. 数据查询语言(Data Query Language,DQL)
    用来查询表中的记录,主要包含 SELECT 命令,来查询表中的数据。
  2. 数据控制语言(Data Control Language,DCL)
    用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对数据库中的用户设定权限。主要包含以下几种命令:
  • GRANT:赋予用户操作权限
  • REVOKE:取消用户的操作权限
  • COMMIT:确认对数据库中的数据进行的变更
  • ROLLBACK:取消对数据库中的数据进行的变更

基本语法

  1. SQL 语句不区分大小写
  2. SQL 语句中含有字符串的时候,需要像 ‘abc’ 这样,使用英文单引号’将字符串括起来,用来标识这是一个字符串。
  3. SQL 语句中含有日期的时候,同样需要使用英文单引号将其括起来。日期的格式有很多种(‘26 Jan 2010’ 或者’10/01/26’ 等),统一使用 ‘2020-01-26’ 这种’年-月-日’的格式。
  4. 在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可。
  5. SQL 语句要以分号;结尾.在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。

C语言中文网SQL教程

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
-- 查看数据库 ,LIKE可选,不写就是查看全部  
SHOW DATABASES [LIKE '数据库名'];
-- 安装 MySQL 时系统自动创建的6个数据库,其各自功能如下:
-- information_schema:主要存储了系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息和分区信息等。
-- mysql:MySQL 的核心数据库,类似于 SQL Server 中的 master 表,主要负责存储数据库用户、用户访问权限等 MySQL 自己需要使用的控制和管理信息。常用的比如在 mysql 数据库的 user 表中修改 root 用户密码。
-- performance_schema:主要用于收集数据库服务器性能参数。
-- sakila:MySQL 提供的样例数据库,该数据库共有 16 张表,这些数据表都是比较常见的,在设计数据库时,可以参照这些样例数据表来快速完成所需的数据表。
-- sys:MySQL 5.7 安装完成后会多一个 sys 数据库。sys 数据库主要提供了一些视图,数据都来自于 performation_schema,主要是让开发者和使用者更方便地查看性能问题。
-- world:world 数据库是 MySQL 自动创建的数据库,该数据库中只包括 3 张数据表,分别保存城市,国家和国家使用的语言等内容。


-- 创建数据库
-- 字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];


-- 查看数据库的定义声明
SHOW CREATE DATABASE test_db;


-- 使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数
ALTER DATABASE [数据库名] {
[ DEFAULT ] CHARACTER SET <字符集名> |
[ DEFAULT ] COLLATE <校对规则名>}
-- ALTER DATABASE 用于更改数据库的全局特性。
-- 使用 ALTER DATABASE 需要获得数据库 ALTER 权限。
-- 数据库名称可以忽略,此时语句对应于默认数据库。
-- CHARACTER SET 子句用于更改默认的数据库字符集。


-- 删除数据库
DROP DATABASE [ IF EXISTS ] <数据库名>
-- MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。


-- USE 语句用来完成一个数据库到另一个数据库的跳转
-- 创建数据库之后,该数据库不会自动成为当前数据库
USE <数据库名>


-- 单行注释
# 单行注释

/*
多行注释
*/


-- 查看帮助命令,查询内容是关键字,可以用LIKE
HELP '查询内容'

SQL语句的大小写规则
MySQL 用服务器主机的底层文件系统所包含的目录和文件来表示数据库和表。因此,数据库名和表名的默认大小写取决于服务器主机的操作系统在命名方面的规定。
MySQL大小写规则

常见错误
1
2
1 开头 服务器错误
2 开头 客户端错误



数据库设计

数据库设计三个范式

1
2
3
4
5
6
7
1.第一范式: 要求任何一张表必须有主键,每一个字段原子性不可再分。

2.第二范式: 建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
(学术编号+教师编号,学生姓名,教师姓名)->(学生编号,教师编号)(学生编号,学生姓名)(教师编号,教师姓名)

3.第三范式: 建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。
(学生编号,学生姓名,班级编号,班级名称)->(学生编号,学生姓名,班级编号)(班级编号,班级名称)
MySQL数据类型
1
2
3
4
5
6
7
8
9
10
11
整型:TINYINT(1字节,255) SMALLINT(2字节,65535)  MEDIUMINT(3字节,16777214) INT(4字节,4294967295) BIGINT(8字节,)

浮点型:FLOAT(4字节) DOUBLE(8字符) DECIMAL(M+2字节,指定精度)

日期型:YEAR(yyyy,1字节) TIME(HH:MM:SS,3字节) DATE(YYYY-MM-DD,三字节) DATETIME(YYYY-MM-DD HH:MM:SS,8字节)

字符串类型:CHAR(M字节,定长) VARCHAR(L+1字节,L实际长度) TINYTEXT(L字节,2**8) TEXT(L+2字节,2**16) MEDIUMTEXT(L+3字节,2**24) LONGTEXT(L+3字节,2**32) ENUM() SET()

二进制类型:BIT() BINARY() VARBINARY() BLOB()

转义符: 用\

系统变量

1
2
3
4
5
6
-- MySQL 中的系统变量以两个“@”开头。
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;

-- 设置
SET @@global.innodb_file_per_table=default;
MySQL存储引擎

存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。

1
2
3
4
SHOW ENGINES;

SET default_storage_engine=< 存储引擎名 >

InnoDB

1.支持事务,实现了4个隔离级别
2.灾难恢复性好,commit rollback crash-recovery
3.行级锁
4.缓存处理
5.支持外键

使用InnoDB时,MySQL会在数据目录(Data )下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。
InnoDB存储引擎和MyISAM不太一样,虽然也有.frm文件来存放表结构定义相关的元数据,但是表数据和索引数据是存放在一起的.至于是每个表单独存放还是所有表存放在一起,用户可以自己设置。

物理存储结构

  1. 数据文件(表数据和索引数据)
    数据文件用来存放数据表中的数据和所有的索引数据,包括主键和其他普通索引。
    InnoDB存储的数据采用表空间(Tablepace)进行存放设计。表空间是用来存放MySQL系统相关信息的一个特殊共享表空间。
    InnoDB的表空间分为以下两种形式∶
    共享表空间,表数据和索引都存放在同一个表空间。默认的表空间文件就是上面所提到的MySQL初始化路径下的 ibdata1文件。
    独立表空间,每个表的数据和索引被存放在一个单独的.ibd文件中。
  2. 日志文件
    默认情况下,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把表结构信息都写到了系统表空间。

数据表的基本操作