Mysql简明指南

0x00

作为一个前端, 平时很少接触数据库. 当需要自己在数据库中创建用户, 授权和创建表结构时, 就有点不知所措了, 更不要说什么字符编码格式设置, 数据库备份了. 每次自己想要折腾点什么的时候, 总是会被这些开发前的基础操作卡住. 这次终于痛下决心, 将mysql使用中常用的一些命令做一个总结, 以便在之后再次碰到时可以有一个查询的地方, 不至于再在google上查的死去活来, 劳心又劳力. 好了, 正文开始.

0x01: mysql服务启动和停止

在linux上, 可以使用service命令来查看mysql服务的运行状态.

service mysql status

如果Mysql服务是开启状态的, 可以看到类似如下信息.

● mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-11-04 10:05:23 CST; 26min ago
  Process: 685 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 682 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 472 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $?
  Process: 438 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 392 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
 Main PID: 583 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 27 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           └─583 /usr/sbin/mysqld

Nov 04 10:05:21 iZ8vb19h08028cm32sq645Z systemd[1]: Starting MariaDB database server...
Nov 04 10:05:23 iZ8vb19h08028cm32sq645Z mysqld[583]: 2018-11-04 10:05:23 139923048784448 [Note] /usr/sbin/mysqld (mysqld 1
Nov 04 10:05:23 iZ8vb19h08028cm32sq645Z systemd[1]: Started MariaDB database server.

这里使用的Mysql的一个衍生版: mariadb

service命令的基本使用格式如下:

service < option > | --status-all | [ service_name [ command | --full-restart ] ]

除了staus命令, 还有start, stop, restart命令等, 如果想要查看service命令的更多用法, 需要使用man命令来查看详细说明.

man service

如果系统的版本比较老或者是非debian系的linux, 可能没有service命令, 这里有一个替代命令: systemctl,具体的使用方法可以google一下, 在这里就不过多介绍了.

0x02: 登录, 创建用户和授权

登录Mysql

一般在安装mysql后, 如果没有特殊设置, 一般只有一个root用户. 如果需要创建新的用户, 需要使用这个root用户登录mysql, 并执行相应的操作. 登录mysql的命令如下:

mysql -u root -p

回车后提示输入密码, 输入完成之后回车就登录进mysql了. 这里只是列出了登录本地Mysql需要的基本命令. 如果需要登录远程Mysql, 则需要通过Msql帮助获取更多的参数说明.

mysql --help

创建新用户

使用root用户登录Mysql后, 接下来就是创建新用户了. 下面就是一条最简单的创建命令.

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';

这样就创建了一个能在本地登录, 密码是mypass的用户jeffery. 接下来就是给用户授权了.

授权

给用户授权, 则需要使用 GRANT 关键字. 如给刚刚已经创建的jeffery授予数据库db1的SELECT权限, 则只需要如下操作.

    GRANT SELECT ON db1.* TO 'jeffery'@'localhost';

如果需要将SELECT权限扩大到全部数据库, 则只需要将db1换成*. 如果需要授予所有权限, 则需要将SELECT换成ALL.

授权时创建用户

如果授权时, 该用户并未被创建, 授权语句并不会报错, 与此同时, Mysql会创建这个新用户, 并将权限赋予它. 所以, 一般情况下, 我们可以在同时进行用户的创建和授权. 那么就是下面的这种格式:

GRANT PRIVILEGES ON DATABASE.TABLE TO 'USERNAME'@'LOGINHOST' IDENTIFIED BY 'PASSWORD';

那么, 上面创建和授权的过程就可以简写为这样:

GRANT SELECT ON db1.* ON 'jeffery'@'localhost' IDENTIFIED BY 'mypass';

0x03: 数据库信息查看

  1. 显示数据库列表:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| resource           |
+--------------------+
4 rows in set (0.01 sec)

  1. 进入某个数据库:
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

  1. 显示库中的数据表:
MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| column_stats              |
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| gtid_slave_pos            |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| index_stats               |
| innodb_index_stats        |
| innodb_table_stats        |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| roles_mapping             |
| servers                   |
| slow_log                  |
| table_stats               |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
30 rows in set (0.00 sec)
  1. 查看某个表的表结构:
MariaDB [mysql]> describe host;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| Select_priv           | enum('N','Y') | NO   |     | N       |       |
| Insert_priv           | enum('N','Y') | NO   |     | N       |       |
| Update_priv           | enum('N','Y') | NO   |     | N       |       |
| Delete_priv           | enum('N','Y') | NO   |     | N       |       |
| Create_priv           | enum('N','Y') | NO   |     | N       |       |
| Drop_priv             | enum('N','Y') | NO   |     | N       |       |
| Grant_priv            | enum('N','Y') | NO   |     | N       |       |
| References_priv       | enum('N','Y') | NO   |     | N       |       |
| Index_priv            | enum('N','Y') | NO   |     | N       |       |
| Alter_priv            | enum('N','Y') | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+
20 rows in set (0.00 sec)

0x04: 数据库和表的创建与删除

  1. 数据库的创建与删除
# 创建
create database databaseName;
# 删除
drop database databaseName;
  1. 表的创建与删除
    表创建之前, 必须要先指定数据库, 否则是无法创建的. 删除同理.
#创建
create table tableName(create_definition,...)
    [table_options]
    [partition_options]
#删除
drop table tableName;

数据库的创建与删除相对来说, 比较简单, 但对于表来说, 因为涉及到每个字段的定义, 和对表的整体描述, 外加主键和外键关联等, 表的创建与删除更加复杂. 一般来说, 都会选择可视化工具来完成对表的创建和删除, 而不是手工去写sql语句, 这里只是对建表的语句的结构进行一个简要的介绍, 详细内容可以参见Mysql的帮助文档.

0x05: 系统工具的利用

这里忽略了如何对表及字段进行的一些操作, 不是不重要, 只是全部介绍清楚太过于繁琐, 即使看完了也只能是有个大致的印象, 等过个两天估计又忘了. 但是, 如果我们能够熟练的使用系统内的帮助, 即使记不住这些繁琐的结构, 也能很快的完成各种操作. 其中一个上面已经说过了, 就是系统内的man命令.

man mysql
MYSQL(1)                                        MariaDB Database System                                       MYSQL(1)

NAME
       mysql - the MariaDB command-line tool

SYNOPSIS
       mysql [options] db_name

DESCRIPTION
       mysql is a simple SQL shell (with GNU readline capabilities). It supports interactive and non-interactive use.
       When used interactively, query results are presented in an ASCII-table format. When used non-interactively (for
       example, as a filter), the result is presented in tab-separated format. The output format can be changed using
       command options.

...

这里对Mysql进行了详细的介绍. 不过由于没有目录结构, 可能会显得比较多. 但是, 还有一个更好用的帮助文档, 那就是Mysql终端里的help命令. 普通的help命令会显示一些常用的快捷命令.

MariaDB [(none)]> help

General information about MariaDB can be found at
http://mariadb.org

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

For server side help, type 'help contents'

如果需要更加详细的帮助, 则需要help contents命令的帮助.

MariaDB [(none)]> help contents;
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
   Account Management
   Administration
   Compound Statements
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Help Metadata
   Language Structure
   Plugins
   Procedures
   Table Maintenance
   Transactions
   User-Defined Functions
   Utility

在这里, 有更多细分的帮助说明. 在只有系统帮助的情况下, 就完成了以前需要在网上搜索很长时间才能完成的前期准备工作.

0x06: 后记

授之以鱼, 不如授之以渔, 真正学会了如何利用系统帮助, 才能真正的事半功倍. 优秀的软件本身就是最好的帮助文档, 通过这次对Mysql基本操作的学习和总结, 更加深了我对这句话的理解.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容