MySQL 快速上手

最后编辑于: 2016-04-25

游戏名目

数据库Database 是按照数据结构来组织存储和管理数据的仓库

关系型数据库Relational Database Management System是建立在关系模型基础上的数据库借助于集合代数等数学概念和方法来处理数据库中的数据其特点包括

  1. 数据以表格的形式出现
  2. 每行为各种记录名称
  3. 每列为记录名称所对应的数据域
  4. 许多行和列组成一张表单
  5. 若干的表单组成数据库

SQLStructured Query Language语言 是介于关系代数与关系演算之间的结构化查询语言是一个通用的功能极强的关系型数据库语言

MySQL 是最流行的关系型数据库管理系统性能高成本低可靠性好最早属于 MySQL AB 公司后来几经转折到了 Oracle 手里目前仍然提供社区版本的 MySQL为了规避其闭源的风险MySQL 创始人 Michael “Monty” Widenius 主导开发了 MySQL 的分支版本 MariaDB

安装MySQL

使用发行版的包管理器安装如 Archlinux 使用 MariaDB 作为默认的 MySQL 实现安装和配置参考 MySQL - ArchWiki 进行

首先安装mariadb

$ sudo pacman -S mariadb

然后初始化 MariaDB 的目录

$ sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

然后使用 systemd 使能并启动 mysqld.service 守护进程

$ sudo systemctl enable mysqld.service
$ sudo systemctl start mysqld.service

之后启动机器 mysqld.service 会作为守护进程自动启动

然后执行以下脚本来进行一些初始化安全设置(设置root用户密码删除匿名用户关闭root用户远程登录删除test数据库重载授权表)注意提示输入root用户密码时直接按回车即可这个root用户和系统的root用户需要区分开

$ sudo mysql_secure_installation

基础入门

MySQL 数据库系统使用 客户端-服务器Client-Server 架构mysqld 作为服务器负责在数据库上进行实际的操作客户端 mysql 通过SQL语言和服务器端交互告诉服务器如何在数据库上进行操作因此之前的配置将mysqld.service 添加到守护进程而之后我们主要需要了解如何使用mysql客户端和SQL语句来和服务器通信

使用

$ mysql -u root -p

即可作为数据库的 root 用户登录

创建帐号

添加用户分为两步创建用户(CREATE USER) + 授权(GRANT)需要由root用户来完成示例创建一个用户名为oncemore密码为666666的用户并且授予mydb数据库的所有权限

MariaDB> CREATE USER 'oncemore'@'localhost' IDENTIFIED BY '666666';
MariaDB> GRANT ALL PRIVILEGES ON mydb.* TO 'oncemore'@'localhost';
MariaDB> FLUSH PRIVILEGES;
MariaDB> quit

FLUSH PRIVILEGES 更新已经加载到内存当中的授权信息使得修改的授权信息生效另外quit用于退出 MariaDB也可以使用exit或者Ctrl+D组合键退出注意到每条语句使用;结束回车换行不会被解析为语句结束也可以使用\g来结束语句(go)

用户创建成功后即可使用

$ mysql -u oncemore -p

登入新建的用户

配置选项

前面已经见过了-u-p等命令行选项-u选项表示登录服务器的用户名-p表示通过命令提示符输入用户密码使用mysql --help可以获得完整的选项列表需要注意的是可以通过-p[password]或者--password=[password]来登录而不是通过命令提示输入密码但是不建议这样做因为系统中的其他用户能够通过ps指令查看到你的登录指令从而轻易获取到密码默认情况下表示连接本地(localhost)MySQL服务器也可通过-h选项来指定其他主机在使用localhostMySQL使用Unix域套接字文件而不是TCP/IP协议来建立连接这时可通过-S file_name或者--socket=file_name来指定套接字文件ArchLinux下默认使用/run/mysql/mysql.sock

如果尝试直接运行mysql会报错

$ mysql
ERROR 1045 (28000): Access denied for user 'guanhao'@'localhost' (using password: NO)

而忽略掉某些选项时'-h'却不会报错因为某些选项可以直接使用默认值并且这些默认值可以通过配置文件来配置MariaDB 按照以下顺序读取配置文件mysqld --help --verbose输出的前几行有说明

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. ~/.my.cnf

不同位置的配置文件具有不同的作用范围~/.my.cnf位置在用户各自的家目录供系统用户配置自己的MySQL选项而前两个配置文件由系统管理员用于配置系统全局选项使用mysqld --print-defaults可以打印当前的配置

如果需要直接使用mysql指令登录~创建一个.my.cnf文件插入以下文本即可出于安全考虑还是建议不要将密码以明文形式存储

[client]
host = localhost
user = oncemore
password = 666666

注意到[client]是配置文件的一个组表示MySQL客户端建立连接相关的配置此外还有[mysql][mysqld]等组此外还需要注意的细节包括

最后最好给配置文件设置合适的权限放置其他用户修改

$ chmod 600 ~/.my.cnf

创建数据库

创建数据库和表并插入数据需要用到的语法

语法 作用
CREATE DATABASE 创建数据库
CREATE TABLE 创建表
INSERT INTO 插入一行数据

示例首先使用oncemore账户连接SQL服务器

MariaDB [(none)]> CREATE DATABASE mydb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> USE mydb;
Database changed
MariaDB [mydb]> CREATE TABLE langs (name VARCHAR(20), level INT);
Query OK, 0 rows affected (0.23 sec)
MariaDB [mydb]> INSERT INTO langs (name, level) VALUES('cpp',60);
Query OK, 1 row affected (0.01 sec)
MariaDB [mydb]> INSERT INTO langs (name, level) VALUES('python',70);
Query OK, 1 row affected (0.03 sec)
MariaDB [mydb]> INSERT INTO langs (name, level) VALUES('javascript',NULL);
Query OK, 1 row affected (0.03 sec)
MariaDB [mydb]> SELECT * FROM langs;
+------------+-------+
| name       | level |
+------------+-------+
| cpp        |    60 |
| python     |    70 |
| javascript |  NULL |
+------------+-------+
3 rows in set (0.03 sec)

说明创建了 mydb 数据库之前已授权mydb 内创建了表langs插入了三行cpp,python,javascript)注意NULL表示未知值空值最后使用SELECT * from 语法打印整个langs如果某些表项过长导致输出阅读困难可以使用\G作为语句结束纵向地打印表项将每列的值分布到单独的行显示在启动mysql时加上-E或者--vertical选项可以对整个会话生效

执行方式

除了使用mysql指令建立连接然后一句一句地输入语句执行之外还可以通过命令行直接执行语句这时需要给mysql指令加上-e选项多条语句之间使用;分隔

$ mysql -e "SELECT COUNT(*) from langs;SELECT NOW();" mydb
+----------+
| COUNT(*) |
+----------+
|        3 |
+----------+
+---------------------+
| NOW()               |
+---------------------+
| 2016-04-21 16:12:08 |
+---------------------+

除此之外当然还可以像其他编程语言一样SQL语句存储到一个单独的文件中然后使用mysql读取文件内的语句当然如果可以读取文件那也可以读取其他程序的输出

参考文章

  1. MariaDB - Wikipedia
  2. MySQL - ArchWiki
  3. mysqld Configuration Files and Groups
  4. MySQL CookBook, 3rd Edition
(全文完)

ICP18008150号-1

♥ It's Easy if You Try