232-在Mac上探索MySQL的安装与使用
刘小泽写于2021.1.29 最近打算迁移一个数据库,看到原来数据库使用到了MySQL的方法,来学习一下怎么使用吧。这次主要看Mac系统的,其实都是现成的软件,然后加上一些基础命令的使用,所以windows应该也差不多
背景介绍
什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
什么是MySQL
来自:https://jerrynest.io/mysql-tutorial/
MySQL 是一套快速、功能强大的资料库管理系统。所谓资料库管理系统(Database Management System, 简称为DBMS),它是透过一组程式模组来组织、管理、储存和读取资料库的资料,任何使用者在操作资料库时,都需要透过资料库管理系统来处理。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle(甲骨文)公司。
MySQL
将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL
所使用的SQL
语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了
MySQL
作为网站数据库。MySQL
是一个多用户、多线程的关系型数据库管理系统。 工作模式是基于客户机/服务器结构。目前它可以支持几乎所有的操作系统
RDBMS的特点
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
MySQL的优势
来自https://www.w3cschool.cn/mysql/
- 使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性
- 支持多线程,充分利用 CPU 资源
- 提供多语言支持
- 可以处理拥有上千万条记录的大型数据库
- 开源,不需支付额外费用
- 对 PHP 有很好的支持,PHP是目前流行的 Web 开发语言
首先下载
官网在:https://dev.mysql.com/downloads/mysql/
然后它会很有心机地让你注册,其实不需要:
接着安装
安装过程需要注意:倒数第二步有一个设置管理员密码的操作,这一步的密码一定要切记!
它关乎到后面链接数据库的过程【当然,如果后期真的忘记密码,也有补救措施,不要慌】
安装完,就会在系统设置中看到,多了MySQL的图标,并且其中默认状态是开启
安装后运行
基础使用可以参考:https://gridscale.io/en/community/tutorials/mysql-datenbank-erstellen-loeschen/
打开mysql
打开终端(terminal),运行:
mysql -u root -p
查看编码格式
然后在命令提示符后面继续输入:
# 注意最后的;也要输入
show variables like '%char%';
看到其中显示utf8mb4
,在最新版的mysql中,是默认安装这个的。它和utf8
完全兼容,并且还支持Unicode标准,允许显示emoji表情
查看当前的数据库
mysql> SHOW DATABASES;
# 大写或小写均可
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
MySQL 默认的三个数据库:
- mysql 存储 MySQL server 所需的系统信息
- information_schema 提供数据库元数据的连接
- performance_schema 监控 MySQL Server 的底层执行情况
新建一个数据库
# 同样也是大小写均可
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
在数据库中新建用户
参考:https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql
# We specify the user’s host as localhost and not the server’s IP address
# 用户名是:guest;密码是:guest123
mysql> CREATE USER 'guest'@'localhost' IDENTIFIED BY 'guest123';
Query OK, 0 rows affected (0.00 sec)
这里的localhost
指的是本地的计算机
这时,我们只是新建了一个用户,但这个用户并不能对我们的数据库进行任何操作,而且即使用新用户去登陆mysql,也是不可以的。接下来,必须要对新用户赋予权限
赋予(GRANT) 新用户权限
# 如果允许新用户访问所有数据库,第一个星号就是指的数据库【但实际操作中不推荐】
mysql> GRANT ALL PRIVILEGES ON * . * TO 'guest'@'localhost';
# 如果只允许新用户访问某个数据库,但可以访问其中的所有表单(table),第二个星号就是table
mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'guest'@'localhost';
Query OK, 0 rows affected (0.01 sec)
# 最后把这些权限上传
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
各种权限的解释:
ALL PRIVILEGES:完全的访问(如果不指定某个数据库,该用户可以完全访问全部的数据库)
CREATE:允许用户新建数据库或表单
DROP:允许用户删除数据库或表单
DELETE:允许用户删除表单中的行
INSERT:允许用户插入表单中的行
SELECT:允许用户获取数据库内容
UPDATE:允许用户更新表单的行
一般的格式是:
mysql> GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';
记得每次更新完权限以后,都要上传一下:FLUSH PRIVILEGES;
如果要取消(REVOKE)某种权限:
mysql> REVOKE type_of_permission ON database_name.table_name FROM 'username'@'localhost';
查看用户当前的权限
# 标准格式是:
SHOW GRANTS FOR 'username'@'localhost';
# 例如
mysql> SHOW GRANTS FOR 'guest'@'localhost';
+-----------------------------------------------------------+
| Grants for guest@localhost |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
| GRANT ALL PRIVILEGES ON `testdb`.* TO `guest`@`localhost` |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)
不仅删除用户权限,还将整个用户删除
# 和删除数据库一样,用drop
DROP USER 'username'@'localhost';
测试新用户能否使用
# 先退出当前
mysql> quit
Bye
# 然后
mysql -u [username] -p
删除数据库
mysql> drop database testdb;
Query OK, 0 rows affected (0.00 sec)
# then double check
mysql> show databases;
注意
mysql
的代码不支持tab自动补全- 虽然 SQL 语法中,对关键词是不区分大小写的,比如
create
或CREATE
都是可以的。在 SQL 代码中应尽量保持一致,对保留字都用大写,对自造的库名、表名、列名都用小写 localhost
的 ip也叫做:127.0.0.1
(https://www.howtogeek.com/225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/)