MySQL简单入门教程

安装与配置

直接在官网下载即可。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