自学数据库-MySQL
MySQL 是一个关系数据库中比较流行的中型数据库。因为是开源免费的(被甲骨文收购后开始收费,但是也有社区版可以免费使用),使用范围很广。MySQL 和大多数关系型数据库一样,使用 SQL 语言。
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 进行一些操作:
- 对 mysql 进行初始化,产生一个临时密码
mysqld --initialize --user=mysql --console
- 安装 mysql 服务
mysqld --install
- 启动 mysql 服务
net start mysql
- 登录 mysql,这里需要使用之前产生的临时密码
mysql -uroot -p
- 修改 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
- 停止服务
net stop mysql
- 卸载服务
SC delete mysql
或使用
mysqld -remove MySQL
- 执行卸载程序(使用安装包安装)
- 删除安装文件夹下所有文件
- 删除隐藏文件夹 C:\ProgramData\MySQL 下所有文件
- 删除注册表信息
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
- 删除环境变量
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 列名 数据类型