Bootstrap

自学数据库-MySQL


MySQL 是一个关系数据库中比较流行的中型数据库。因为是开源免费的(被甲骨文收购后开始收费,但是也有社区版可以免费使用),使用范围很广。MySQL 和大多数关系型数据库一样,使用 SQL 语言。

MySQL官网
MySQL最新版本官方下载

MySQL 的安装和卸载

基于 linux

使用包管理器安装

可以使用 包管理器 来安装,需注意的是,安装包为 mysql-server

安装过程中会有提示选择时区,可以选择 Etc 然后自己选时区,例如中国是 GTM+8 东八区。

安装完成后,可以查看 mysql 版本

mysql --version

运行服务

安装完成后,可以运行 mysql 服务

service mysql start

如果运行服务或尝试重新运行时报错: warning: cannot change directory to /nonexistent: No such file or directory ,可以修改一下程序的主目录:

service mysql stop
usermod -d /var/lib/mysql/ mysql
service mysql start

初始化配置

首先需要执行初始化配置程序

mysql_secure_installation

如果报错:Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 则是 mysql 服务没有运行成功,需要重新运行。

初始化配置程序执行后,会有提示

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:

询问是否验证密码插件,它通过检查用户密码的强度来增强 MySQL Server 的安全性,允许用户仅设置强密码。按 Y 接受或按任意键跳过。

再接下来是设置 root 的密码。如果这一部输密码报错:... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters. 则需要手动配置密码。(注:程序会卡到这里一直让输入密码,而密码又无法设置。所以这里需要断开连接重新登录)在 ubuntu 的 shell 里输入 mysql 登录到 mysql 数据库中(因为还没配置密码,所以不需要密码)。

# 查看一下 root 使用的密码插件
select host,user,plugin from mysql.user;
# 发现密码插件是 auth_socket,改成 caching_sha2_password,并设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '123456';
# 更新一下
FLUSH PRIVILEGES;
# 再次查看
select host,user,plugin from mysql.user;

更改完成后, \q 退出数据库。重新执行初始化配置程序。这次会提示输入密码,因为刚才手动改了。然后到刚才设置 root 用户密码的步骤,变成了是否变更密码。

接下来就是继续之前的,询问是否删除匿名用户。

然后询问,是否禁止 root 用户从远程登录。

是否删除 test 数据库和对它的访问权限。

最后询问是否刷新授权表,并让初始化后的设定立即生效。

登录 sql

配置完成后,就可以登录了

mysql -uroot -p123456

允许远程访问

如果需要允许远程访问,需要修改配置文件。mysql 的默认配置文件是 /etc/mysql/mysql.conf.d/mysqld.cnf 修改此文件即可。

需要修改的地方有:

  • bind-address = 0.0.0.0 允许所有 ip 进行访问
  • port = 3306 设置访问端口

然后需要在 mysql 里设置允许远程访问的用户

CREATE USER 'root'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

完成后重启服务就可以了。

基于 windows

MySQL 分为安装包安装和压缩包安装两种方式,区别在于压缩包安装的配置在安装包的安装过程中进行设置。

使用压缩包安装

压缩包直接解压到文件夹里即可。解压完成后,在根目录下建立配置文件 my.ini。

[mysqld]
# 设置访问主机和端口,默认127.0.0.1:3306
bind-address=127.0.0.1
port=3306
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 允许最大连接数
max_connections=20
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

然后设置环境变量,新建变量名 MYSQL_HOME ,值为解压目录。然后添加 %MYSQL_HOME%\bin 到 path 环境变量里:。

之后可以对 mysql 进行一些操作:

  1. 对 mysql 进行初始化,产生一个临时密码
mysqld --initialize --user=mysql --console
  1. 安装 mysql 服务
mysqld --install
  1. 启动 mysql 服务
net start mysql
  1. 登录 mysql,这里需要使用之前产生的临时密码
mysql -uroot -p
  1. 修改 root 用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '123456';

初始化后会在 mysql 目录下生成一个 data 文件夹,即之后使用的数据库所在。如果临时密码丢失了可以删除此文件夹重新初始化。

使用安装包进行安装

使用安装包安装比较简单,只是一些选项需要选择:

  • Choosing a Setup Type 选择安装类型,使用 developer default 开发者默认
  • Select Products and Features 选择产品和功能,将 mysql server / mysql workbench / mysql notiyier 三项添加到右侧

其他的选择 next 和 是 就可以了,接下来会自动进行安装。当安装完成后会进行配置。

  • Type and Networking 类型和网络,使用 Development Computer 开发者电脑的默认配置即可
  • Authentication Method 身份验证方法使用密码校验身份,然后输入数据库密码
  • Windows Service 可以将mysql添加到服务中,设置服务名称并随系统启动

之后一路下路步,就会开始进行配置了。配置完成后会有连接测试,输入用户名和密码,点击 check ,会显示连接成功。之后没有什么需要配置的了,一路 next 就行。

卸载 mysql

  1. 停止服务
net stop mysql
  1. 卸载服务
SC delete mysql
或使用
mysqld -remove MySQL
  1. 执行卸载程序(使用安装包安装)
  2. 删除安装文件夹下所有文件
  3. 删除隐藏文件夹 C:\ProgramData\MySQL 下所有文件
  4. 删除注册表信息

HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL

  1. 删除环境变量

MySQL 的图形管理工具

MySQL 的图形管理工具还是挺多的,推荐使用 Navicat、SQLyog、phpMyAdmin

  • Navicat 是一款使用比较广泛的数据库管理工具,支持多种数据库,也有 MySQL 专用版。缺点在于需要收费。
  • SQLyog 是一个很简单的轻量化的 MySQL 管理工具,对于中文的支持还是比较好的。SQLyog 也是需要注册收费的。
  • phpMyAdmin 是一个基于 web 的 MySQL 管理工具。

MySQL 的基本语法

mysql 的基本语法是

命令 [参数1 [, 参数2…]] 子命令 [参数1 [, 参数2 …]] [子命令 [参数1 [, 参数2]]];

即一个命令附带若干参数,然后接此命令支持的若干子命令。最后会以分号结尾,表示执行此命令。

一条命令是可以分为多行书写的,且不需要连字符,当使用分号 (😉 后立即执行之前的命令。

MySQL 的基本操作 DDL

DDL (Data Definition Language) 是数据定义语言,该语言主要包含对数据库、表结构的常用操作,用来修改表结构。

对数据库的常用操作

SQL命令 功能 举例
show databases 查看所有数据库
create database 创建数据库 create database [if not exists] mydb1 [charset=utf8mb4]
use 切换(选择要操作的)数据库 use mydb1
drop database 删除数据库 drop database[if exists] mydb1
alter database character 修改数据库编码 alter database mydb1 character set utf8mb4
select database() 查询当前数据库
select version() 查询当前数据库软件版本

对表结构的常用操作

  • 创建表
create table [if not exists] 表名(
	字段名1	类型[(宽度)]		[约束条件]	[comment '字段说明'],
	字段名2	类型[(宽度)]		[约束条件]	[comment '字段说明'],
	字段名3	类型[(宽度)]		[约束条件]	[comment '字段说明']
) [表的一些设置];
  • 查看当前数据库所有表名称
show tables;
  • 查看某个表的创建语句
show create table 表名;
  • 查看表结构
desc 表名;
  • 删除表(表结构)
drop table 表名;
  • 删除表(只删除表数据,不删除表结构)
truncate table 表名;
  • 添加列(字段)
alter table 表名 add 列名 类型(长度) [约束];
  • 修改列名和类型
alter table 表名 change 旧列名 新列名 类型(长度)  [约束];	-- 用此方法必须修改列名
alter table 表名 modify 列名 数据类型 
;