Mysql簡(jiǎn)明指南

0x00

作為一個(gè)前端, 平時(shí)很少接觸數(shù)據(jù)庫. 當(dāng)需要自己在數(shù)據(jù)庫中創(chuàng)建用戶, 授權(quán)和創(chuàng)建表結(jié)構(gòu)時(shí), 就有點(diǎn)不知所措了, 更不要說什么字符編碼格式設(shè)置, 數(shù)據(jù)庫備份了. 每次自己想要折騰點(diǎn)什么的時(shí)候, 總是會(huì)被這些開發(fā)前的基礎(chǔ)操作卡住. 這次終于痛下決心, 將mysql使用中常用的一些命令做一個(gè)總結(jié), 以便在之后再次碰到時(shí)可以有一個(gè)查詢的地方, 不至于再在google上查的死去活來, 勞心又勞力. 好了, 正文開始.

0x01: mysql服務(wù)啟動(dòng)和停止

在linux上, 可以使用service命令來查看mysql服務(wù)的運(yùn)行狀態(tài).

service mysql status

如果Mysql服務(wù)是開啟狀態(tài)的, 可以看到類似如下信息.

● 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的一個(gè)衍生版: mariadb

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

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

除了staus命令, 還有start, stop, restart命令等, 如果想要查看service命令的更多用法, 需要使用man命令來查看詳細(xì)說明.

man service

如果系統(tǒng)的版本比較老或者是非debian系的linux, 可能沒有service命令, 這里有一個(gè)替代命令: systemctl,具體的使用方法可以google一下, 在這里就不過多介紹了.

0x02: 登錄, 創(chuàng)建用戶和授權(quán)

登錄Mysql

一般在安裝mysql后, 如果沒有特殊設(shè)置, 一般只有一個(gè)root用戶. 如果需要?jiǎng)?chuàng)建新的用戶, 需要使用這個(gè)root用戶登錄mysql, 并執(zhí)行相應(yīng)的操作. 登錄mysql的命令如下:

mysql -u root -p

回車后提示輸入密碼, 輸入完成之后回車就登錄進(jìn)mysql了. 這里只是列出了登錄本地Mysql需要的基本命令. 如果需要登錄遠(yuǎn)程Mysql, 則需要通過Msql幫助獲取更多的參數(shù)說明.

mysql --help

創(chuàng)建新用戶

使用root用戶登錄Mysql后, 接下來就是創(chuàng)建新用戶了. 下面就是一條最簡(jiǎn)單的創(chuàng)建命令.

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

這樣就創(chuàng)建了一個(gè)能在本地登錄, 密碼是mypass的用戶jeffery. 接下來就是給用戶授權(quán)了.

授權(quán)

給用戶授權(quán), 則需要使用 GRANT 關(guān)鍵字. 如給剛剛已經(jīng)創(chuàng)建的jeffery授予數(shù)據(jù)庫db1的SELECT權(quán)限, 則只需要如下操作.

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

如果需要將SELECT權(quán)限擴(kuò)大到全部數(shù)據(jù)庫, 則只需要將db1換成*. 如果需要授予所有權(quán)限, 則需要將SELECT換成ALL.

授權(quán)時(shí)創(chuàng)建用戶

如果授權(quán)時(shí), 該用戶并未被創(chuàng)建, 授權(quán)語句并不會(huì)報(bào)錯(cuò), 與此同時(shí), Mysql會(huì)創(chuàng)建這個(gè)新用戶, 并將權(quán)限賦予它. 所以, 一般情況下, 我們可以在同時(shí)進(jìn)行用戶的創(chuàng)建和授權(quán). 那么就是下面的這種格式:

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

那么, 上面創(chuàng)建和授權(quán)的過程就可以簡(jiǎn)寫為這樣:

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

0x03: 數(shù)據(jù)庫信息查看

  1. 顯示數(shù)據(jù)庫列表:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| resource           |
+--------------------+
4 rows in set (0.01 sec)

  1. 進(jìn)入某個(gè)數(shù)據(jù)庫:
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. 顯示庫中的數(shù)據(jù)表:
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. 查看某個(gè)表的表結(jié)構(gòu):
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: 數(shù)據(jù)庫和表的創(chuàng)建與刪除

  1. 數(shù)據(jù)庫的創(chuàng)建與刪除
# 創(chuàng)建
create database databaseName;
# 刪除
drop database databaseName;
  1. 表的創(chuàng)建與刪除
    表創(chuàng)建之前, 必須要先指定數(shù)據(jù)庫, 否則是無法創(chuàng)建的. 刪除同理.
#創(chuàng)建
create table tableName(create_definition,...)
    [table_options]
    [partition_options]
#刪除
drop table tableName;

數(shù)據(jù)庫的創(chuàng)建與刪除相對(duì)來說, 比較簡(jiǎn)單, 但對(duì)于表來說, 因?yàn)樯婕暗矫總€(gè)字段的定義, 和對(duì)表的整體描述, 外加主鍵和外鍵關(guān)聯(lián)等, 表的創(chuàng)建與刪除更加復(fù)雜. 一般來說, 都會(huì)選擇可視化工具來完成對(duì)表的創(chuàng)建和刪除, 而不是手工去寫sql語句, 這里只是對(duì)建表的語句的結(jié)構(gòu)進(jìn)行一個(gè)簡(jiǎn)要的介紹, 詳細(xì)內(nèi)容可以參見Mysql的幫助文檔.

0x05: 系統(tǒng)工具的利用

這里忽略了如何對(duì)表及字段進(jìn)行的一些操作, 不是不重要, 只是全部介紹清楚太過于繁瑣, 即使看完了也只能是有個(gè)大致的印象, 等過個(gè)兩天估計(jì)又忘了. 但是, 如果我們能夠熟練的使用系統(tǒng)內(nèi)的幫助, 即使記不住這些繁瑣的結(jié)構(gòu), 也能很快的完成各種操作. 其中一個(gè)上面已經(jīng)說過了, 就是系統(tǒng)內(nèi)的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.

...

這里對(duì)Mysql進(jìn)行了詳細(xì)的介紹. 不過由于沒有目錄結(jié)構(gòu), 可能會(huì)顯得比較多. 但是, 還有一個(gè)更好用的幫助文檔, 那就是Mysql終端里的help命令. 普通的help命令會(huì)顯示一些常用的快捷命令.

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'

如果需要更加詳細(xì)的幫助, 則需要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

在這里, 有更多細(xì)分的幫助說明. 在只有系統(tǒng)幫助的情況下, 就完成了以前需要在網(wǎng)上搜索很長(zhǎng)時(shí)間才能完成的前期準(zhǔn)備工作.

0x06: 后記

授之以魚, 不如授之以漁, 真正學(xué)會(huì)了如何利用系統(tǒng)幫助, 才能真正的事半功倍. 優(yōu)秀的軟件本身就是最好的幫助文檔, 通過這次對(duì)Mysql基本操作的學(xué)習(xí)和總結(jié), 更加深了我對(duì)這句話的理解.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市要拂,隨后出現(xiàn)的幾起案子烈炭,更是在濱河造成了極大的恐慌呀袱,老刑警劉巖摘昌,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茸时,死亡現(xiàn)場(chǎng)離奇詭異剖煌,居然都是意外死亡痰腮,警方通過查閱死者的電腦和手機(jī)而芥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膀值,“玉大人棍丐,你說我怎么就攤上這事〔滋ぃ” “怎么了歌逢?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)翘狱。 經(jīng)常有香客問我秘案,道長(zhǎng),這世上最難降的妖魔是什么盒蟆? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮师骗,結(jié)果婚禮上历等,老公的妹妹穿的比我還像新娘。我一直安慰自己辟癌,他們只是感情好寒屯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著黍少,像睡著了一般寡夹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厂置,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天菩掏,我揣著相機(jī)與錄音,去河邊找鬼昵济。 笑死智绸,一個(gè)胖子當(dāng)著我的面吹牛野揪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞧栗,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼斯稳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了迹恐?” 一聲冷哼從身側(cè)響起挣惰,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎殴边,沒想到半個(gè)月后憎茂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡找都,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年唇辨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片能耻。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赏枚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晓猛,到底是詐尸還是另有隱情饿幅,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布戒职,位于F島的核電站栗恩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洪燥。R本人自食惡果不足惜磕秤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捧韵。 院中可真熱鬧市咆,春花似錦、人聲如沸再来。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芒篷。三九已至搜变,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間针炉,已是汗流浹背挠他。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篡帕,地道東北人绩社。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓摔蓝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親愉耙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贮尉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,948評(píng)論 2 89
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 7,820評(píng)論 5 116
  • 觀其大綱 page 01 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 M...
    周少言閱讀 3,158評(píng)論 0 33
  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序朴沿。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API猜谚,用于創(chuàng)建,訪問赌渣,管理...
    chen_000閱讀 4,041評(píng)論 0 19
  • 1.HashMap是非synchronized的魏铅,可以接受null為key或者value,其中的元素是沒有順序的 ...
    帥氣的喵了個(gè)咪閱讀 337評(píng)論 0 0