什么是数据库
数据库,DataBase,简称DB,作用是存储和管理数据。
特点有:
存储数据的仓库
是一个文件系统
提供了专门的工具来操作和管理数据
关系型和非关系型
数据库分为两类:
关系型数据库
例如:MySQL
、Oracle
、SQL Server
、DB2
、SQLite
非关系型数据库。
例如:Redis
、MongoDB
、ElasticSearch
、HBase
关系型数据库
什么是关系型数据库
关系型数据库用二维表格,即行(Row)和列(Column)来表示数据,一系列的行和列,组成表(Table),一系列的表组成库(DataBase)。表与表之间,可能会有关联关系,比如部门表的每个部门的ID,会出现的员工表的部门字段中,表示某位员工的部门是哪个。
SQL是关系型数据库的查询语言。
关系型数据库设计规则
E-R(entity-relationship,实体-联系)模型中有三个主要概念:实体集、属性、联系集。
一个实体集(class)对应于数据库中的一个表(table)。
一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)。
一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。
表的关联关系
关联关系有四种:
一对一关联
一对多关联
多对多关联
自我关联(自我引用)
非关系型数据库
非关系型数据库又可以分为:
键值型数据库
文档型数据库
搜索数据库
列式数据库
图数据库
键值型数据库
键值型数据库,顾名思义,通过"Key-Value"键值的方式来存储数据。
Key和Value可以是简单的对象,也可以是复杂的对象,Key是唯一标识。
这类数据库的优点是查找速度快,在这方面明显优于关系型数据库。缺点是无法像关系型数据库一样使用条件过滤。
键值型数据库典型的使用场景是作为内存缓存。
典型的键值型数据库是Redis。
文档型数据库
文档型数据库,用于存储和读取文档,这些文档可以是XML、JSON等格式,一个文档就相当于一条记录。
我们可以认为,文档数据库所存放的文档,就相当于键值数据库所存放的"值"。
典型的文档型数据库是MongoDB。
搜索数据库
搜索数据库,典型代表是ElasticSearch。
关于Elastic Search,我们在《ElasticSearch实战入门(6.X)》 有过更详细的讨论。
此外,常见的搜索数据库还有Solr、Splunk。
列式数据库
列式数据库是相对于行式存储的数据库而言的,如Oracle、MySQL、SQL Server等数据库都是采用的行式存储(Row-Based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统。
典型的列式数据库是HBase。
图数据库
图数据库,专用于描述对象之间的关系。
如图所示,是三星系各公司之间的持股关系,这种关系,之前讨论的的几种非关系型数据库都无法描述。关系型数据库,虽然可以描述,但不够方便。
而图数据库可以,图数据库的数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。
典型的图数据库有Neo4J、InfoGrid等。
(是的,图数据库,这种专门用来描述关系的数据库,却通常被分类到非关系数据库的类别。)
比较
关系型
非关系型
数据结构
结构化
非结构化
数据关联
关联的
无关联
查询方式
SQL
非SQL
事务特性
ACID
无事务(或者无法满足事务的强一致性)
关系型数据库的数据关联,指的是通过外键的方式进行关联(虽然在阿里巴巴的开发规范中,不建议使用外键)。
MySQL安装与配置
目前,存在两个主要版本的MySQL,5.X和8.X。
在这里,我们以8.X为例。
Windows
我们先讨论如何在Windows上安装配置一个MySQL。
安装
关于Windows的安装包,可以从这个地址下载:https://dev.mysql.com/downloads/installer/
(如果需要安装5.X的版本,点击网页的"Looking for previous GA versions?",切换到5.X的安装包)
具体安装过程,我们不做太多讨论,和常见的Windows程序安装并没有太大区别。
唯一需要注意的是这里。
三种选择,对应三种不同的内存使用量。
开发:只会使用少数的内存。
服务器:会使用中等程度的内存。
专用:会使用所有的内存。
数据目录
在安装完成之后,我们可以打开Windows电脑上的这个地址
1 C:\ProgramData\MySQL\MySQL Server 8.0\Data
会看到如下内容:
然后我们通过数据库客户端软件,比如Navicat,看看都有哪些库。
一个文件夹一个库?
这似乎也和我们在本文开头的观点对上了,数据库是一个文件系统。
库的解释
information_schema
,MySQL自带的数据库,主要保存MySQL数据库服务器的系统信息。比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件所在的目录,等等。
performance_schema
,MySQL自带的数据库,可以用来监控MySQL的各类性能指标。
sys
,MySQL自带的数据库,主要作用是以一种更容易被理解的方式展示MySQL数据库服务器的各类性能指标。
mysql
,MySQL自带的数据库,保存了MySQL数据库服务器运行时需要的系统信息,比如数据文件夹、当前使用的字符集、约束检查信息等。
其他操作
卸载
如果我们卸载MySQL的,并且以后都不用的话,可以删除C:\ProgramData\MySQL\MySQL Server 8.0\Data
这个目录。
服务
Windows上,在安装完成之后,默认是服务已经启动,而且是开机自启动。但,也可以自行修改启动方式,或者停止服务。
通过命令services.msc
打开"服务",找到MySQL的服务(默认是mysql80,具体服务名称,在安装过程中会有提示,可以修改),即可修改启动方式,或者停止服务。
此外,还可以,以管理员身份运行cmd,通过命令net start mysql80
和net stop mysql80
,启动和停止服务。
配置文件
MySQL的配置文件:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Linux:YUM
接下来,我们讨论如何在Linux上安装和配置MySQL。
在Linux上安装软件,有四种方式。
源码编译
压缩包解压(一般为tar.gz)
编译好的安装包(RPM、DPKG等)
在线安装(YUM、APT等)
在这里,我们只讨论YUM和RPM。
删除已安装的MariaDB
MariaDB是一款默认安装在CentOS 7的数据库软件,我们先将MariaDB卸载。
(其实,MariaDB是MySQL的一个分支。2009年SUN被Oracle收购,MySQL的创始人等担心MySQL有闭源的风险,因此创建了MySQL的分支项目MariaDB。)
检查MariaDB
示例代码:
运行结果:
1 mariadb-libs-5.5.68-1.el7.x86_64
删除Mariadb
示例代码:
1 rpm -e --nodeps mariadb-libs
运行结果:
检查MySQL
示例代码:
运行结果:
1 2 3 4 5 6 7 mysql-community-client-8.0.28-1.el7.x86_64 mysql-community-common-8.0.28-1.el7.x86_64 mysql-community-libs-8.0.28-1.el7.x86_64 mysql-community-server-8.0.28-1.el7.x86_64 mysql80-community-release-el7-5.noarch mysql-community-client-plugins-8.0.28-1.el7.x86_64 mysql-community-icu-data-files-8.0.28-1.el7.x86_64
删除MySQL
示例代码:
1 2 3 rpm -e --nodeps mysql-community-client 【部分代码略】
添加MySQL Yum Repository
查看系统版本
示例代码:
运行结果:
1 CentOS Linux release 7.9.2009 (Core)
选择对应的版本进行下载
在 https://repo.mysql.com/ ,找到对应的版本。 例如,在CentOS 7安装MySQL的rpm地址为:https://repo.mysql.com/mysql80-community-release-el7.rpm
示例代码:
1 wget https://repo.mysql.com/mysql80-community-release-el7.rpm
运行结果:
1 2 3 4 5 6 7 8 9 10 --2022-01-28 21:10:04-- https://repo.mysql.com/mysql80-community-release-el7.rpm Resolving repo.mysql.com (repo.mysql.com)... 104.86.185.42 Connecting to repo.mysql.com (repo.mysql.com)|104.86.185.42|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 10928 (11K) [application/x-redhat-package-manager] Saving to: ‘mysql80-community-release-el7.rpm’ 100%[===================================================================] 10,928 --.-K/s in 0s 2022-01-28 21:10:06 (304 MB/s) - ‘mysql80-community-release-el7.rpm’ saved [10928/10928]
安装MySQL源
示例代码:
1 rpm -Uvh mysql80-community-release-el7.rpm
运行结果:
1 2 3 4 warning: mysql80-community-release-el7.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql80-community-release-el7-5 ################################# [100%]
注意:rpm -Uvh
的U
大写。
检查是否安装成功
安装成功后会在/etc/yum.repos.d/
目录下生成两个repo文件mysql-community.repo
以及mysql-community-source.repo
。
示例代码:
运行结果:
1 2 3 4 5 total 16 -rw-r--r-- 1 root root 675 Jan 28 20:35 CentOS-Base.repo -rw-r--r-- 1 root root 230 Jan 28 20:35 epel.repo -rw-r--r-- 1 root root 2062 Jan 13 03:00 mysql-community.repo -rw-r--r-- 1 root root 2132 Jan 13 03:00 mysql-community-source.repo
通过yum repolist
可以看到mysql相关资源。 示例代码:
1 yum repolist enabled | grep "mysql.*-community.*"
运行结果:
1 2 3 mysql-connectors-community/x86_64 MySQL Connectors Community 230 mysql-tools-community/x86_64 MySQL Tools Community 138 mysql80-community/x86_64 MySQL 8.0 Community Server 321
选择MySQL版本
查看当前MySQL Yum Repository中所有MySQL版本 示例代码:
1 yum repolist all | grep mysql
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community disabled mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - disabled mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community disabled mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - disabled mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community disabled mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - disabled mysql-connectors-community/x86_64 MySQL Connectors Community enabled: 230 mysql-connectors-community-source MySQL Connectors Community - disabled mysql-tools-community/x86_64 MySQL Tools Community enabled: 138 mysql-tools-community-source MySQL Tools Community - Sourc disabled mysql-tools-preview/x86_64 MySQL Tools Preview disabled mysql-tools-preview-source MySQL Tools Preview - Source disabled mysql57-community/x86_64 MySQL 5.7 Community Server disabled mysql57-community-source MySQL 5.7 Community Server - disabled mysql80-community/x86_64 MySQL 8.0 Community Server enabled: 321 mysql80-community-source MySQL 8.0 Community Server - disabled
切换版本
如果版本不对,需要切换版本。切换版本的命令如下:
1 2 sudo yum-config-manager --disable mysql57-community sudo yum-config-manager --enable mysql80-community
注意:
在这里我们不需要切换版本。 如果提示yum-config-manager: command not found
。这是因为系统默认没有安装这个命令,这个命令在yum-utils
包里,可以通过命令yum -y install yum-utils
进行安装。 除了使用yum-config-manager
之外,还可以直接编辑/etc/yum.repos.d/mysql-community.repo
文件。 示例代码:
1 2 3 4 5 6 [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
解释说明:
安装MySQL
示例代码:
1 yum install mysql-community-server
在安装过程中,还会提问Is this ok
,一般输入y
,即可。
该命令会安装MySQL服务器(mysql-community-server
)及其所需的依赖、相关组件,包括mysql-community-client
、mysql-community-common
、mysql-community-libs
等。
至此,MySQL安装完毕。
启动MySQL
启动
示例代码:
1 systemctl start mysqld.service
查看状态
示例代码:
1 systemctl status mysqld.service
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2022-01-28 21:19:16 CST; 5s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1487 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 1562 (mysqld) Status: "Server is operational" CGroup: /system.slice/mysqld.service └─1562 /usr/sbin/mysqld Jan 28 21:19:11 Linux systemd[1]: Starting MySQL Server... Jan 28 21:19:16 Linux systemd[1]: Started MySQL Server. [root@Linux ~]#
停止和重启
两个相关的命令,停止和重启,也在这里列举一下。 停止:
1 systemctl stop mysqld.service
重启: 示例代码:
1 systemctl restart mysqld.service
修改密码
初始密码
MySQL第一次启动后会创建超级管理员账号root@localhost
,初始密码存储在日志文件中。 在日志中找到初始密码。 示例代码:
1 grep 'temporary password' /var/log/mysqld.log
运行结果:
1 2022-01-28T13:19:13.656009Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: /#.fRi:yF1,?
登录
示例代码:
1 mysql -h127.0.0.1 -uroot -p
运行结果:
然后输入上一步找到的临时密码。 注意:
密码建议在下一行输入,保证安全。(否则用history
命令能看到密码) 如果在同一行输入密码,-p
与密码之间不能有空格,但其他参数名与参数值之间可以有空格也可以没有空格。 注意,上述的登录命令,默认可以不输入-h127.0.0.1
。此外上述的登录命令还有一个完整版,如下
1 mysql --host=127.0.0.1 --user=root --password
修改密码
示例代码:
1 ALTER USER 'root' @'localhost' IDENTIFIED BY '123456' ;
运行结果:
1 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
出现这个提示是因为密码太简单了,解决方法如下:
使用复杂密码,MySQL默认的密码策略是要包含数字、大小写字母及特殊字符。 修改密码策略,修改配置文件/etc/my.cnf
,添加validate_password=OFF
,保存并重启MySQL。
建议使用复杂密码!
示例代码:
1 ALTER USER 'root' @'localhost' IDENTIFIED BY 'MySQL@2022' ;
运行结果:
1 Query OK, 0 rows affected (0.00 sec)
允许root远程访问
但是,这时候我们并不能远程访问我们的数据库,只能登录服务器进行访问。
接下来,我们讨论如何允许root远程访问。
授权
关于授权部分,在8版本和5版本的区别较大。
8版本的方式如下:
先创建用户:1 CREATE USER '用户名' @'IP地址' IDENTIFIED BY '密码' ;
示例代码:1 CREATE USER 'root' @'%' IDENTIFIED BY 'MySQL@2022' ;
再给用户授权:1 grant all privileges on 库名.表名 to '用户名' @'IP地址' ;
示例代码:1 grant all privileges on *.* to 'root' @'%' ;
5版本的方式如下:
1 grant all privileges on 库名.表名 to '用户名' @'IP地址' identified by '密码' with grant option ;
示例代码:
1 GRANT ALL PRIVILEGES ON *.* TO 'root' @'%' IDENTIFIED BY 'MySQL@2022' WITH GRANT OPTION ;
设置编码为utf8
查看编码
示例代码:
1 SHOW VARIABLES LIKE 'character%' ;
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql-8.0/charsets/ | +--------------------------+--------------------------------+
如果是5版本,执行结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
退出
exit
或quit
,都可以。 示例代码:
运行结果:
修改字符集
如果是5版本,需要修改字符集。 编辑/etc/my.cnf
,[mysqld]
节点增加以下代码:
1 2 3 [mysqld] character_set_server=utf8 init-connect='SET NAMES utf8'
在修改字符集之后,需要重启MySQL。
设置开机启动
示例代码:
1 2 systemctl enable mysqld systemctl daemon-reload
Linux:RPM
第二种Linux系统的安装方法是通过RPM。
删除已安装的MariaDB
第一步同样是删除已安装的MariaDB,具体操作略,参考上文。
下载MySQL安装包
在这个网址 https://dev.mysql.com/downloads/mysql/ ,找到对应的安装包,并下载。
示例代码:
1 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
如果不想下载rpm-bundle,官网也提供单独的rpm下载链。
安装MySQL
解压
示例代码:
1 tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
运行结果:
1 2 3 4 5 6 7 8 9 10 mysql-community-client-8.0.28-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm mysql-community-common-8.0.28-1.el7.x86_64.rpm mysql-community-devel-8.0.28-1.el7.x86_64.rpm mysql-community-embedded-compat-8.0.28-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm mysql-community-libs-8.0.28-1.el7.x86_64.rpm mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm mysql-community-server-8.0.28-1.el7.x86_64.rpm mysql-community-test-8.0.28-1.el7.x86_64.rpm
我们需要安装的是这六个:
mysql-community-common-8.0.28-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
mysql-community-libs-8.0.28-1.el7.x86_64.rpm
mysql-community-client-8.0.28-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
mysql-community-server-8.0.28-1.el7.x86_64.rpm
如果是MySQL5.X的话,只需要安装四个:
mysql-community-common-5.7.36-1.el7.x86_64.rpm
mysql-community-libs-5.7.36-1.el7.x86_64.rpm
mysql-community-client-5.7.36-1.el7.x86_64.rpm
mysql-community-server-5.7.36-1.el7.x86_64.rpm
安装
各rpm包是有依赖关系的,所以需要按照如下的顺序进行安装:
1 2 3 4 5 6 rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
记不住顺序怎么办?没关系,安装过程中会提示。 例如,提示
1 2 3 warning: mysql-community-libs-8.0.28-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY error: Failed dependencies: mysql-community-client-plugins = 8.0.28-1.el7 is needed by mysql-community-libs-8.0.28-1.el7.x86_64
另外,如果安装过程中提示缺少了其他的包,那么就把缺少的包安装上,可能会提示需要安装libaio
。
macOS
关于macOS的安装包,可以从这个地址下载:https://dev.mysql.com/downloads/mysql/
整个安装过程,没有需要赘述的。
安装完成后,在macOS的System Preferences
可以看到MySQL,点击之后,分别可以启动停止MySQL
以及配置文件路径。
安装完成后,已经可以通过各种图形化的MySQL工具连接了,但是还无法通过类似于mysql -uroot -p
的命令连接,因为安装路径还没有添加到系统搜索路径(环境变量)下。
默认安装路径是/usr/local/mysql
,如果要使用子程序,需要将/usr/local/mysql/bin
添加到系统环境变量中。
编辑.bash_profile
,示例代码:
新增如下内容:
1 export PATH=${PATH}:/usr/local/mysql/bin
刷新,使其生效。
除了设置环境变量,第二种方法,我们只为常用命令mysql
和mysqladmin
设置别名,示例代码:
1 2 alias mysql=/usr/local/mysql/bin/mysql alias mysqladmin=/usr/local/mysql/bin/mysqladmin
tar.gz
再讨论一下基于tar.gz
安装MySQL,以在Linux中为例,macOS中整体类似。
准备工作
在准备工作阶段,同样需要删除已安装的MySQL,具体操作略,参考上文。
下载包并解压
在这个网址https://downloads.mysql.com/archives/community/
,找到对应的安装包,下载并解压。
解压命令:
1 tar -zxvf mysql-8.0.33-el7-x86_64.tar.gz
配置安装
一、在解压后的目录下,创建data文件夹
1 2 cd mysql-8.0.33-el7-x86_64 mkdir data
三、修改mysql安装目录的所属用户组
1 chown -R mysql:mysql mysql-8.0.33-el7-x86_64
四、创建mysql配置文件
配置文件内容如下:
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 [mysqld] port =3306 basedir =/usr/local/mysql/mysql-8.0.33-el7-x86_64 datadir =/usr/local/mysql/mysql-8.0.33-el7-x86_64/data max_connections =200 max_connect_errors =10 character-set-server =utf8mb4 default-storage-engine =INNODB user =mysql lower_case_table_names =1 default-time-zone ='+8:00' sql_mode =NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE [client] port =3306 default-character-set =utf8mb4
四、初始化mysql服务
在/usr/local/mysql/mysql-8.0.33-el7-x86_64/bin
执行如下的命令,初始化,示例代码:
1 ./mysqld --initialize --console
运行结果:
1 2 3 4 5 6 2023-10-08T07:06:14.828204Z 0 [Warning] [MY-010915] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. 2023-10-08T07:06:14.828309Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead. 2023-10-08T07:06:14.828344Z 0 [System] [MY-013169] [Server] /usr/local/mysql/mysql-8.0.33-el7-x86_64/bin/mysqld (mysqld 8.0.33) initializing of server in progress as process 28051 2023-10-08T07:06:14.856500Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-08T07:06:15.145062Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2023-10-08T07:06:15.875784Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 3m?uJQ%nHcB;
注意,这个是初始密码。
1 A temporary password is generated for root@localhost: 3m?uJQ%nHcB;
启动停止MySQL
在support-files
目录下,找到mysql.server
。
启动MySQL:
停止MySQL:
启动之后,可以通过./mysql -uroot -p
登录,后续修改密码、允许远程访问等操作,与上文没有区别。
题外话
my.cnf
默认路径是/etc/my.cnf
,想要修改默认位置,可以修改support-files/mysql.server
里207行的conf=
。 (不同版本的MySQL可能略有区别,一般再207行上下。)
安装MySQL客户端
对于Windows和MacOS上安装MySQL客户端,我们不讨论。可以利用DataGrip或者Navicat等图形化的软件。
在Linux上安装MySQL客户端的方法如下:
连接异常的处理
对于部分客户端,在连接的时候,可能会有如下的错误:
原因是:MySQL8.0默认采用caching_sha2_password
的加密方式,但是有些第三方客户端不支持这种加密方式。
解决方法如下:
登录服务器,通过命令,mysql -u root -p
,进入MySQL。
修改加密方式,例如:1 ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Qigaoxiang2018@';
刷新:
卸载MySQL
关闭MySQL服务
查询系统是否安装了MySQL
查询系统是否安装了MySQL,示例代码:
运行结果:
1 2 3 4 5 6 7 mysql-community-server-8.0.35-1.el7.x86_64 mysql-community-libs-8.0.35-1.el7.x86_64 mysql-community-client-plugins-8.0.35-1.el7.x86_64 mysql80-community-release-el7-11.noarch mysql-community-icu-data-files-8.0.35-1.el7.x86_64 mysql-community-client-8.0.35-1.el7.x86_64 mysql-community-common-8.0.35-1.el7.x86_64
如输出结果表示,已经安装了MySQL,所以不得不卸载重装
卸载并删除MySQL安装的组键服务,示例代码:
1 2 3 4 5 6 7 rpm -ev mysql-community-server-8.0.35-1.el7.x86_64 rpm -ev mysql-community-libs-8.0.35-1.el7.x86_64 rpm -ev mysql-community-client-plugins-8.0.35-1.el7.x86_64 rpm -ev mysql80-community-release-el7-11.noarch rpm -ev mysql-community-icu-data-files-8.0.35-1.el7.x86_64 rpm -ev mysql-community-client-8.0.35-1.el7.x86_64 rpm -ev mysql-community-common-8.0.35-1.el7.x86_64
查看MySQL对应的文件夹,示例代码:
运行结果:
1 2 3 4 5 6 /var/lib/mysql /var/lib/mysql/mysql /var/lib/pcp/config/pmlogconf/mysql /etc/selinux/targeted/active/modules/100/mysql /etc/selinux/targeted/tmp/modules/100/mysql /usr/lib64/mysql
删除系统中MySQL的所有文件夹,示例代码:
1 2 3 4 5 6 rm -rf /var/lib/mysql rm -rf /var/lib/mysql/mysql rm -rf /var/lib/pcp/config/pmlogconf/mysql rm -rf /etc/selinux/targeted/active/modules/100/mysql rm -rf /etc/selinux/targeted/tmp/modules/100/mysql rm -rf /usr/lib64/mysql
最后验证MySQL是否删除完成,示例代码:
SQL
什么是SQL
SQL,Structured Query Language,结构化查询语言。当然,其实SQL不仅仅可以查询,还可以新增、修改、删除等,只是取了这个名字。
SQL是操作所有关系型数据库的规则,关系型数据库有很多,但是所有的关系型数据库都遵守SQL的规则。
在《基于JavaScript的前端开发入门:2.基础语法》 中,我们讨论了ECMAScript,ECMAScript是JavaScript的语法和基础核心,是所有浏览器厂商共同遵守的一套JavaScript语法工业标准。
也就是说,SQL和ECMAScript类似,是一种大家都遵守的约定。
ECMAScript存在一些方言,例如:JScript、ActionScript等。
SQL也存在一些方言,有些是MySQL特有、有些是Oracle特有。
ECMAScript存在很多版本,其中比较重要的版本是ES6。
SQL也存在很多版本,其中比较重要的版本的是SQL92和SQL99。
SQL分类
SQL在功能上主要分为如下四类:
DQL(Data Query Languages),数据查询语言。用来查询数据库中表的记录(数据)。
主要的语句关键字有:SELECT
、WHERE
等。
DDL(Data Definition Languages),数据定义语言,这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字有:CREATE
、DROP
、ALTER
等。
DML(Data Manipulation Language),数据操作语言,用于添加、删除、更新数据库记录,并检查数据完整性。
主要的语句关键字有:INSERT
、DELETE
、UPDATE
等。
DCL(Data Control Language),数据控制语言,用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字有:GRANT
、REVOKE
、COMMIT
、ROLLBACK
、SAVEPOINT
等。
这四种SQL和库以及表的关系如下:
有一些资料会把DQL
合并到DML
。
还有一些资料会把COMMIT
、ROLLBACK
抽出来,称为TCL
(Transaction Control Language),事务控制语言。
SQL的规则与规范
SQL可以写在一行或者多行。
为了提高可读性,各子句分行写,必要时可以使用缩进。
每条命令以;
、\g
或\G
结束。
关键字不能被缩写也不能分行。
标点符号:
必须保证所有的括号()
、单引号' '
、双引号" "
是成对的。
必须使用半角的表标点符号。
字符串型和日期时间类型的数据可以使用单引号' '
表示。
列的别名,尽量使用双引号" "
,而且不建议省略as
除了上述规则,还有和命名有关的规则,我们会在《3.DDL、DML、DCL》 进行讨论。
注释
单行注释:#
,MySQL特有的方式。
单行注释:--
,--
后面必须有一个空格。
多行注释:/* 注释文字 */
。
SQL大小写建议
如果MySQL被安装在Windows上,是大小写不敏感的。
如果MySQL被安装在Linux上:
数据库名、表名、表的别名、变量名是大小写敏感的。
关键字、函数名、列名(或字段名)、列的别名(字段的别名)是大小写不敏感的。
推荐采用统一的书写规范:
数据库名、表名、表别名、字段名、字段别名等都小写。
关键字、函数名、绑定变量等都大写。