MySql学习笔记

mysql安装

centos安装

点击跳转下载链接

centos选择Red Hat Enterprise Linux

历史版本选择Archives

将文件拷贝到centos下后使用命令安装

1
rpm -ivh 文件名

windows安装

默认windows安装的mysql服务名字为mysql80

命令提示符打开和关闭

1
2
net start mysql80
net stop mysql80

Ubuntu安装

1
sudo apt install mysql-server
  • 启动systemctl start mysql
  • 停止systemctl stop mysql
  • 查看运行状态systemctl status mysql

root密码

linux系统默认安装完成后默认是有密码的,密码和账户名在/etc/mysql/debian.cnf

默认的用户和密码不方便记忆,我们可以将其更改。

连接到mysql服务后可以用下面的语句修改root用户和密码

将密码改为admin123

首先进入数据库use mysql;

1
alter user 'root'@'localhost' identified with mysql_native_password by 'admin123';

然后使用flush privileges刷新权限,然后就可以使用新的密码来登录了

版本号查看

操作系统 查看

1
mysql --version;

mysql内查看

1
2
status		#查看日志内的版本号
select version(); #直接查看版本号

mysql登录

本地登录命令

1
mysql -u用户名 -p密码

远程登录命令

1
mysql -u用户名 -p密码 -l服务器	

关于密码

默认安装mysql会带有密码,密码存放在

1
cat /etc/mysql/debian.cnf

跳过密码

修改文件

1
vim /etc/my.cnf

添加

1
skip-grant-tables

登录密码不写直接回车

进入后flush privileges;刷新权限

进入mysql后重置密码

1
alter user 'root'@'localhost' identified by 'admin123';

修改密码

因为password字段和password函数都被废弃了,密码的加密方式也发生了变化所以需要用新的命令

mysql version>5.7.9

1
alter user 'root'@'localhost' identified with mysql_native_password by 'admin123';

mysql version<5.7.9

1
update user set password=PASSWORD("123456") where user='root';
1
update user set authentication_string=PASSWORD("admin123") where user='root';

远程登录

很多时候数据库是需要单独安装在服务器上的,这个时候我们会使用workbench或者navicat这样的可视化工具来连接远程客户端的mysql服务,一般在刚安装好之后经常会提示无法连接,这个时候有许多常见的原因,

3306端口

远程登录mysql需要开放3306端口

查看端口

1
show variables like '%port%';

开放3306端口

首先查看端口是否打开

1
netstat -an|grep 3306

查看root用户权限

1
select user,host from user where user='root';

5.7.31版本select host,user,authentication_string from user;

5.7版本以前用select host,user,password from user;

user host
root localhost

如果host字段为localhost表示只能在本地访问,可以通过命令将localhost改为%,这样就可以在任何地方访问了

注意:有安全风险

给root用户远程连接权限

1
update user set host='%' where user='root';

实现远程连接(授权法)

允许root用户从任意ip登录(任意Ip用%表示),权限为ALL PRIVILEGES,密码为123456(密码可以改成自己喜欢的)

1
grant all privileges  on *.* to root@'%' identified by "123456";
  • GRANT ALL PRIVILEGES: 这部分表示授予所有权限。
  • ON *.*: 这指定了权限的范围。*.* 表示所有数据库(第一个 *)和所有表(第二个 *)。
  • TO 'root'@'%': 这指定了权限被授予给哪个用户。'root' 是用户名,'@%' 表示该用户可以从任何主机连接到数据库服务器。% 是一个通配符,代表任意主机。
  • 这部分用于设置或更改用户的密码。在这个上下文中,它尝试将 'root'@'%' 用户的密码设置为 '123456'

配置文件监听地址

mysql服务只监听本地的ip地址这样的话外部是无法连接到mysql服务的

更改配置文件找到bind-addressmysqlx-bind-address,默认是127.0.0.1,是本机ip地址,需要将其改成0.0.0.0表示监听所有的ip地址保存退出重启一下mysql服务

1
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
1
systemctl restart mysql

然后就可以进行远程连接了

使用Workbench时遇到的问题

但是我在使用GUI工具(Workbench)连接mysql的时候遇到一个问题:

总是提示我RuntimeError:Target host is configured as Windows,but seems to be a different OS,Please revisew the connection settings。按照上面所说的意思是原本目标主机是windows,但是检测为其他操作系统。我觉得这都什么乱七八糟的,找了一下资料是MYSQL Workbench软件在中国时区的bug,也有大佬解决了,改一下区域就行了

我的本地运行环境为:Windows10专业版,Workbench为8.0.38

服务器环境:Ubuntu buntu0.24.04.1及MySQL8.0.40

解决方法:

控制面板-区域-管理-更改系统区域设置-勾选【Beta 版: 使用 Unicode UTF-8 提供全球语言支持(U)】

然后重启电脑就可以了

MySQL-Shell

MysqlShell是一个交互式JavaScript Python 和 SQL的终端,可以用于执行数据库管理任务,它提供了自动语法高亮、语法检查、自动完成和上下文感知的提示。

安装也非常简单,直接从官网下载对应版本的安装文件。安装完成后可以在命令行中输入mysqlsh命令启动,MysqlShell中的命令都是以反斜线开头的

启动MySQLShell命令mysqlsh

比如:\help命令可以查看帮助信息,`\connect可以连接到MySQL数据库

1
\connect root@localhost

\use进行选择数据库

MySQLshell是支持三种语言的,默认是JavaScript,想要切换语言的话写语言的缩写就行了

\py就可以切换python语言,可以直接输入python的代码

\sql切换sql语言,切换sql语言之后就可以直接进行各种sql的语句了

在终端或者Navicat中执行sql语句的效果是一样的。Oracle官方提供了vscode的MySQL-Shell的插件,

可以直接在vscode的扩展中搜索mysql shell就可以找到这个插件了,直接install就可以了

SQL基础

关系型数据库管理系统和非关系型数据库管理系统是两种不同的数据库管理系统

关系型数据库管理系统采用了关系模型来组织数据借助于集合 代数等数学概念和方法来处理数据,通过二维表来表示数据之间的联系,二维表的每一行表示一条数据记录每一列表示一个字段也就是记录的某个属性,不同的表之间通过关联字段来建立联系,这种关联关系就是关系型数据库管理系统的特点,MySQL Oracle PostgreSQL等等都是常见的关系型数据库管理系统的代表。

非关系型数据库管理系统,它是对关系型数据库管理系统的补充和扩展,由于互联网的快速发展,仅仅使用关系型数据库已经不能满足需求了,比如各种短视频,流媒体,地理位置信息,社交网络等等,这些数据的特点是数据库量大,数据结构复杂,数据类型多种多样,这又就决定了关系型数据库管理系统并不能很好地处理这些数据,所以就出现了非关系型数据库管理系统,常见的非关系型数据库有Redis,mongoDB,neo4j,cassandra,couchDB

SQL是一种用来操作关系型数据库的语言,在关系型数据库中数据一般都是以二维表的形式来存储的 ,SQL可以用来操作表中的数据,几乎所有的关系型数据库都支持SQL,一般来说sql语句并不区分大小写,但是为了提高可读性,我们一般会把关键字大写,把表明列名和其他名称小写

sql语言功能分类

DDL数据定义语言Data Definition Language:用来定义数据库对象

CREATEDROPALTERTRUNCATE

DML数据操作语言Data Manipulation Language:用来对数据库中的记录进行新增删除或者修改

INSERTUPDATEDELETECALl

DQL数据查询语言Data Query Laguage:用来查询数据库中的记录

SELECTwhere

DCL数据控制语言Data Control Language:用来定义数据库的访问权限和安全级别

GRANTREVOKE

常用的sql语句

show databases;查看当前存在的数据库

create databases game; 创建game数据库

drop database game; 删除game数据库