安装与配置
直接在官网下载即可。macOS也可以在brew下载,不过配置起来可能会不太一样。
打开安装包一路下一步即可。
macOS装好之后就会在系统设置中多出一项来,点开看到没问题就是安装好了。
![]()
然后这个时候还需要配置环境变量,否则无法使用。
Windows是在环境变量管理器里添加。
mac则是在~/.zshrc里面加入一条:
export PATH=$PATH:/usr/local/mysql/bin
注意这是官网安装包的方式,如果是Homebrew的话路径不一样,不过brew应该已经配置好了环境变量。
这样就完成了mysql的配置。可以执行一条
mysql --version
来查看是否正常工作。
MySQL使用
客户端与服务端
mysql常规安装就包含了服务端和客户端。
很多教程会在安装后提到如何启动mysql服务,也就是说它在电脑上启动了一个mysql服务器,存了一个数据库在本地并且可以通过网络访问。
平时在命令行使用mySQL命令去连接别的数据库,这是用的客户端。负责发送SQL指令等
很明显,通常来讲我们更多只是用客户端,连接位于数据中心的远程数据库。但在学习、研究中常常需要用本地的数据库
接入
通常格式如下:
mysql -h 主机名或IP地址 -P 端口号 -u 用户名 -p
通常就直接
mysql -h 127.0.0.1 -u 用户名 -p
学习中,用户通常是直接用root。数据库用户的密码。
如果是访问本地的mysql,则是不需要写ip地址直接登录即可。
mysql -u root -p
执行这一条,会要求输入密码
可以直接将密码写到命令里面:
mysql -uroot -prootpass123
这是在登录账号为root、密码为rootpass123的账户。
两种登录方式
通常,更多是-h参数使用IP地址连接到远程服务器
mysql -h 目标IP地址 -u 用户名 -p
自然,一般是通过连接127.0.0.1来连接的本机的数据库,
mysql -h 127.0.0.1 -u root -p
但是功能有所不同。mysql有两种连接方式,可以不用IP地址来登录:
mysql -u root -p
这种不带-h的这种,是直接通过socket和数据库通信的,这是一种更加高效的方法。但是这很有可能会登录失败,因为使用的是'user'@'localhost',尝试使用当前操作系统的用户去匹配root,但是通常我们并不是使用root账户,因此会失败。
指定了-h才是使用TCP/IP连接的。注意,-h指定为localhost一般也是socket
不管是怎么样,登录之后就会出现
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
此时就是登陆成功了。就可以开始输入MySQL语句执行了。
mySQL默认的端口是在3306。
可以用-P来手动指定别的端口
mysql -h IP地址 -P 3607 # 改到3307
数据库操作
访问MySQL数据库,比较推荐Navicat和DataGrip。
以DataGrip为例,连接后这样操作即可访问数据库。
![]()
![]()
(把要访问的数据库勾选上)
数据库结构
一个mysql服务器,里面的结构可能是这样的:
![]()
比如图里这个服务器里面有这些数据库:
ecommerce_db、fintech_db 👉 这是业务数据库(人创建的)
information_schema
mysql
performance_schema
sys
后面这几个都是MySQL自带的系统数据库。
information_schema存储所有数据库的“元数据”(表结构、列、索引等),mysql是存储用户、权限、账号等核心信息的数据库,performance_schema里是性能监控数据如查询耗时、锁等,sys是对performance_schema的封装。
然后那个“服务器对象”是数据库服务器的全局配置管理入口。包括里面的“用户”就是数据库账号(格式是用户名@允许访问的主机,比如途中的root@localhost就是只能在本机登录的,而root@%是可以在任何机器上登录的)。
虚拟视图这是系统的某些实时数据,例如sessions可能就是当前连接、正在执行的SQL等。
另外,在数据库里可以看到有个“例程-sp_get_order“,那个是存储过程,它的本质就是一个封装了的一些MySQL语句,就类似函数那样。从名字来看,这个看起来可能是获取订单的存储过程,内部可能是这样的
基础操作
在使用mysql命令行连接到数据服务器,出现mysql>之后,就可以输入mySQL语句。
mysql语句只是简单的单词等组成的,不区分大小写。
需要注意,进入的这不是一个数据库,而是服务器,这时
SHOW DATABASES;
可以列出所有的数据库。
如果是进入自己本机的数据库,可能看到的是这样的:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.039 sec)
这些都是mysql的系统数据库,也就是说还没有我们的数据库。可以创建个数据库
create database mydatabase;
如果是连接到已经有数据库的mysql服务器,我们可以看到类似这样的内容
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| ecommerce_db |
| fintech_db |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.197 sec)
然后,我们可以选择进入某个
USE 某个数据库名称;
来选择进入某个数据库,之后对这个进行操作。
然后可以查看这个数据库里的所有表:
SHOW TABLES;
结果可能是这样的:
mysql> SHOW TABLES;
+------------------------+
| Tables_in_ecommerce_db |
+------------------------+
| customer_feedback |
| login_log |
| order_ext_data |
| payment_detail |
| products |
| shipping_address |
| user_attachments |
| user_profile |
+------------------------+
8 rows in set (0.006 sec)
创建表
注意mysql和SQL Server不一样,不能使用
CREATE TABLE product_data (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
price DOUBLE
);
数据类型
在数据表中,每个单元格的数据都是有标记了类型的,例如TEXT、BLOB、VARCHAR、VARBINARY等。
这些通常是在建表的时候就给这个字段定义了类型:
CREATE TABLE users (
name VARCHAR(100),
profile TEXT,
avatar BLOB
);
也可以通过来查看字段的类型:
需要注意,这和现代编程语言中赋值不同,数据库是不会检查之后实际填入这些字段里的值是什么东西的。
字符串类型
CHAR
长度在 的固定长度的字符串。
VARCHAR
TEXT
长文本。可以容纳2
数值型
有int和float等。
二进制类型
BLOB
Binary Large Object
BINARY
固定长度二进制
VARBINARY
可变长度二进制
BYTEA(PostgreSQL)
PostgreSQL里的二进制。
结构化类型
有的数据库还会做解析,比如可以
data JSON
自动解析
例程与函数
MySQL中有两种东西都类似于编程中的函数,例程和函数。它们分别代表了编程中无返回值的函数和有返回值的函数。
例程是存储若干SQL操作的,也就是说它是不返回一个值,而是用来执行一段SQL逻辑的。
前面讲数据库结构的时候就有提到数据库里面有个sp_get_order,这也许是做来实现获取订单
那我们可以猜测它里面可能是这样的:
CREATE PROCEDURE sp_get_order(IN user_id INT)
BEGIN
SELECT * FROM orders WHERE user_id = user_id;
END;
然后调用的时候是这样的:
CALL sp_get_order(123);
而函数则是用来返回一个值。
比如这是常见的函数的样子
CREATE FUNCTION calc_tax(price DECIMAL)
RETURNS DECIMAL
BEGIN
RETURN price * 0.1;
END;
CREATE PROCEDURE process_order(IN user_id INT)
BEGIN
INSERT INTO orders ...
UPDATE users ...
END;
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com
