关于数据库

对于数据存储,事实上可以直接使用文件来保存,但是为什么要存在数据库,因为文件存储数据有很大的缺点:

  • 文件不利于数据查询和管理
  • 文件存储数据不安全
  • 文件在程序中控制不安全
  • 文件不利于存放海量数据

为了解决上面的一些问题,许多公司便设计出了各类数据库用来存储和管理数据,存储介质主要有磁盘和内存。

MySQL安装|Linux

以Ubuntu20.04 为例 | 转载自:https://kalasearch.cn/community/tutorials/ubuntu-20-04-install-mysql/

安装

在终端通过命令进行安装:

1
2
# 更新你的 ubuntu 依赖库索引
sudo apt update
1
sudo apt install mysql-server

在安装完毕后,有少数情况下 MySQL 不会自动启动。为了以防万一,请先确认 MySQL 已经被成功启动起来了:

1
2
# 重启 MySQL 服务以保证 MySQL 已经启动
sudo service mysql restart

配置

第一次安装好 MySQL 之后,我们需要运行 MySQL 自带的安全脚本来确保数据库系统的安全。这个脚本会把一些默认选项,比如允许远程 root 登录之类的设置改掉。

我们以 root 权限运行以下安全脚本

1
sudo mysql_secure_installation

这个脚本开始运行时,会问我们几个问题,主要包括

  1. 是否需要 MySQL 帮你检查密码强度(我们推荐回答需要,即 Y
1
2
3
4
5
6
7
8
9
10
11
12
root@58e152781375:/home/kala# sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y
  1. 选择哪种强度的密码 0 = 低强度,1 = 中等强度, 2 = 强密码 (我们建议选择2)
1
2
3
4
5
6
7
There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
  1. 设置你的 root 密码。如果你选择了强密码,那么你的密码里必须有数字、大小写字母混合,且密码中不允许有常见英文单词出现

    比如说,Ywie_8371jmchw 就是一个强密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

其余的几个问题是加强安全系数用的,一路答 Y 代表 Yes 即可。它会做这么几个操作

  • 删除默认数据库
  • 不允许远程 root 登录
  • 删除匿名用户

请注意,在上面虽然你设置了 root 用户的密码,但是必须走完下一步才能允许 root 用户用密码登录。这一点千万别漏了!

调整用户权限

在 Ubuntu 系统中,MySQL 版本 5.7 以上,root 用户是只能通过 auto_socket 来登录的。你先不用管 auth_socket 本身是什么,但是这意味着你不能用你在第二步中设置的密码来登录。

虽然这的确加强了安全性,但很多时候对于我们管理 MySQL 或者用 phpMyAdmin 之类的管理系统来管理数据库来说,非常非常地不方便。因此建议你完成这一步,来允许用密码登录。

要允许密码登录,我们需要把默认的鉴权方式从 auth_socket 改为 mysql_native_password。按以下步骤开始更改

1
2
# 连接 MySQL 数据库
sudo mysql

接下来,在 MySQL 里(注意光标前面的 mysql> 这代表我们已经在 MySQL 服务器上了)我们需要查看用户的鉴权设置

1
SELECT user,authentication_string,plugin,host FROM mysql.user;

注意看 root 用户这一行(第5行),它的 plugin 这一列就是我们刚说的 auth_socket,这是不允许用密码登录的。那么,我们用 ALTER USER SQL 语句来把它改掉,如下

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YOUR_PASS_WORD';

注意,上面这里的 YOUR_PASS_WORD 应该输入你在第二步中的密码。如果你输了另一个新的密码,那么你的 root 用户的密码会被改掉,这里很容易掉坑。

请留心,这里我们用 ALTER USER 命令把 root 用户的鉴权改为了 caching_sha2_password 方式。如果你看 MySQL 文档的话,会发现 MySQL 官方是推荐这个方式的。但是如果你需要用 PHP 或者 phpMyAdmin 的话,你需要把 caching_sha2_password 换成 mysql_native_password 否则会报错。也即是把上面的那句换成 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASS_WORD';

最后的最后,我们用 FLUSH PRIVILEGES 命令让刚才的权限更改生效:

1
2
3
4
5
# 让鉴权生效
FLUSH PRIVILEGES

# 输出应为
Query OK, 0 rows affected (0.01 sec)

然后我们查看一下更改是不是成功

1
SELECT user,authentication_string,plugin,host FROM mysql.user;

请注意 root 这行,鉴权已经换成了 caching_sha2_password。这时我们可以用 ctrl + D 或者敲入 exit 来退出 MySQL 回到 Ubuntu 命令行。

测试

到了这里,我们可以用 service 命令,看一下 mysql 这个服务是不是正常在运行。service 是个用来管理服务( MySQL 也是 Ubuntu 里服务的一种)的常用命令,推荐大家熟记:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo service mysql status

# 输出应该类似
* /usr/bin/mysqladmin Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version 8.0.20-0ubuntu0.20.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 42 min 5 sec

Threads: 2 Questions: 27 Slow queries: 0 Opens: 157 Flush tables: 3 Open tables: 78 Queries per second avg: 0.010

如果 MySQL 没有在运行的话,你可以用

1
sudo service mysql restart

重启它。

如果你需要验证下客户端连接 MySQL 是不是通畅,那么你可以用 mysqladmin 来尝试一下连接 MySQL。命令和参数如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# -p 代表使用密码,-u root 代表用户为 root,最后的 version 代表我们想要查看 MySQL 版本,这里查看版本这个
# 动作只是为了验证 MySQL 是否可以连上而已。如果连不上,会报错
sudo mysqladmin -p -u root version

# 这里它会询问你 root 用户的密码
Enter password:

# 如果你的密码输入正确,那么输出应该类似
mysqladmin Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version 8.0.20-0ubuntu0.20.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 52 sec

Threads: 2 Questions: 6 Slow queries: 0 Opens: 115 Flush tables: 3 Open tables: 36 Queries per second avg: 0.115

上面的输出说明你的 MySQL 正在健康地运行


可视化工具

这里使用的是免费的 WorkBench

官网:https://dev.mysql.com/downloads/workbench/

选择适合当前系统的安装包下载即可(Windows也是如此)

ubuntu此处下载的是:mysql-workbench-community_8.0.21-1ubuntu20.04_amd64.deb

之后在下载目录里用终端打开:

1
sudo dpkg -i mysql-workbench-community_8.0.21-1ubuntu20.04_amd64.deb

等待安装即可

注:如安装失败,按照提示安装相应的依赖包即可


MySQL安装|Windows

下载

^以下以社区版为例^

进入mysql官网|中文选择[Download],在页面最下面找到[MySQL Community (GPL) Downloads]

并选择下载。

如果速度不理想,还可以通过国内的镜像站下载。

官网提供有两种版本(其实是两种安装方式):
一、MySQL MSI Installer
这是[安装版本],在安装过程中,通过将用户的各项选择自动写入ini(配置文件),即自动配置。适合初学者使用。

二、MySQL ZIP Archive
这是[压缩版本],需要自己打开ini文件写入配置信息。适合高级用户。

下面以安装 社区版MSI Installer 为例,做个简单演示。

社区版官网页面

选择下载

如果选择MSI下载,这里选择第二个资源下载

这里注意一下,虽然显示的是x32,但实际上该安装器是可以选择64位进行安装的,请放心。

选择下载

如果是选择ZIP下载,这里选择第一个资源下载(第二个是debug版本)

选择下载

之后会跳转到这个页面。

跳过登录

安装详细

MSI版的配置

首先,有的同学打开msi程序后,会出现错误提示,意思就是MySQL需要**.NET Framework4.0**才能继续安装,那去安装就行了,这里不再展开。

打开后,选择 [接受协议] 后,选择 [Custom] ,即自定义安装。可根据自己需求选择:

选项含义
Developer Default默认安装类型
Server only仅作为服务器
Client only仅作为客户端
Full完全安装类型
Custom自定义安装类型

为了熟悉安装过程,以下以自定义安装为例继续。

进入这个界面后,根据自己需求在左边选择需要安装的服务和组件,并导入右边。

自定义安装

设置安装目录:

安装目录

之后[Next],[Execute],一路Next到如下界面

服务器配置

选择配置类型时,我这里选择的是小型电脑,可根据自己的需求更改

port设置

根据需求设置自己的端口和密码,还可以跳过 [add users] 添加其他管理员

root密码

继续Next

服务器名字

之后再点击 [Execute],当所需组件安装完成后,点击 [finish]直至安装结束即可。


打开系统的环境变量窗口,添加所安装的mysql的bin文件夹所在位置(环境变量在哪?见另一篇文章)

例如我的是D:\MySQL\MySQL Server 8.0\bin

以上解决mysql 不是可执行文件或命令?问题,无此问题直接跳过


win+R或其他方法打开命令行窗口(cmd),通过命令:

1
$ mysql -u root -p'yourpasword'

即 用户(user)是以管理员(root)的方式打开mysql,其密码(password)是yourpassword,我们之前设置的密码。

当然,也可以在输入到-p后,按回车键输入密码,此时输入的密码是不可见的。如下:

1
2
$ mysql -u root -p
Enter password: *********

于是,即可进入mysql的世界!

1
2
3
4
5
6
7
8
9
10
11
12
13
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

以上是登录成功后的版本号版权声明等mysql的信息,之后在mysql>后输入mysql命令即可使用!

ZIP版的配置

暂时搁浅

可视化工具

mySQL的可视化程序多种多样,此处使用的是Navicat

Navicat官网:http://www.navicat.com.cn/

MySQL语法

使用前提

数据库服务器、数据库和表的关系

  • 安装数据库服务器,只是在机器上安装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
  • 为保存应用中实体的数据,一般会在数据库中创建多个,以保存程序中实体的数据。
    一个数据库服务器可以存在多个数据库,而一个数据库也可以存在多个表。

事务

搁浅

Pymysql库

pymysql是由纯python语言写的,可在python中直接操作MySQL的库

安装

1
pip install pymysql

初始化

  • 使用connect方法,传入配置信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 导包
    import pymysql

    # 实例化数据库对象
    data = {
    'host':'127.0.0.1',
    'port':3306,
    'user':'root',
    'passwd':'123456',
    'db':'yourdb',# 你的数据库名字
    }
    conn = pymysql.connect(**data)
    # 这里的**data,相当于将data这个字典中的内容中,key-value值作为传递参数的关键字参数及其值
    # 本语句等效于:conn = pymysql.connect(host='127.0.0.1',port=3306,...)
  • 设置游标

    1
    sursor = conn.corsor()

    游标内拥有execute()方法,可以对数据库进行操作

    execute()方法内部传递字符串参数,内容必须是合法的MysSQL语句

基本使用

增删改

  • 使用execute

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 直接定义字符串变量保存命令

    # 如,此处使用MySQL语法,写了一个命令创建
    # 有 id ,name 两个属性,分别是 int 和 varchar 类型的表
    # 表名是text
    sql='''
    CRATE TABLE TEXT(id INT,name VARCHAR(20))
    '''
    # 直接通过该命令执行命令
    sursor.execute(dql)
  • 提交内容

    1
    2
    3
    # 如果前面通过execute语句执行了增删改查等操作
    # 需要提交内容
    conn.commit()
  • 关闭退出

    1
    2
    3
    4
    # 关闭游标
    cursor.close()
    # 关闭数据库
    conn.close()

查询

参考资料

1.MYSQL快速入门|CSDN

2.超详细MySQL安装及基本使用教程|CSDN

3.MySQL8.x msi版安装教程图文详解|脚本之家

4.Ubuntu20.04安装mysql