日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MySQL邏輯分層介紹

 Coder編程 2022-04-04

上一篇文章主要介紹了MySQL在Ubuntu18.04系統(tǒng)上的安裝,以及安裝過(guò)程中可能會(huì)遇到的一些問(wèn)題的解決方案。
在這篇文章里,開(kāi)始介紹MySQL數(shù)據(jù)庫(kù)的邏輯分層。通過(guò)本文的介紹,可以大致了解到MySQL的語(yǔ)句從客戶端發(fā)出請(qǐng)求后,在服務(wù)器經(jīng)歷了怎樣的過(guò)程。有助于后面MySQL優(yōu)化的加深理解。

MySQL邏輯分層

一般來(lái)說(shuō),MySQL邏輯可分為四個(gè)層次,分別為:連接層,服務(wù)層,引擎層,存儲(chǔ)層 。

連接層

提供與客戶端連接的服務(wù)。
當(dāng)客戶端發(fā)出一個(gè)請(qǐng)求后(如增刪改查的SQL語(yǔ)句),首先到達(dá)該層,將服務(wù)器與客戶端建立連接。

服務(wù)層

服務(wù)層分兩個(gè)作用:

  • 提供各種用戶使用的接口。select、insert
  • 提供SQL優(yōu)化器(MySQL Query Optimizer)。 SQL優(yōu)化器是MySQL服務(wù)層自帶的一個(gè)服務(wù),它會(huì)自動(dòng)優(yōu)化用戶寫(xiě)得不是最優(yōu)的SQL,使其達(dá)到優(yōu)化的效果。但由于優(yōu)化器畢竟只是優(yōu)化器,有時(shí)候會(huì)將用戶自定義的優(yōu)化方案給更改掉,從而使用戶自己的優(yōu)化方案失效,這一點(diǎn)需要注意。

引擎層

引擎層提供各種數(shù)據(jù)存儲(chǔ)的方式。MySQL的存儲(chǔ)引擎有很多,比較常用的比如有InnoDB, MyISAM。

InnoDB與MyISAM的區(qū)別為:

  • InnoDB 事務(wù)優(yōu)先,所以適合高并發(fā)操作,使用的是行鎖
  • MyISAM 性能優(yōu)先,適合查詢多的場(chǎng)景,使用的是表鎖

查詢數(shù)據(jù)庫(kù)支持哪些引擎的SQL:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

從上面結(jié)果可知,MySQL5.7默認(rèn)的引擎是InnoDB(DEFAULT),除了FEDERATED之外的引擎都支持。

查看當(dāng)前數(shù)據(jù)庫(kù)使用的引擎:

mysql> show variables like '%storage_engine%';
+----------------------------------+--------+
| Variable_name                    | Value  |
+----------------------------------+--------+
| default_storage_engine           | InnoDB |
| default_tmp_storage_engine       | InnoDB |
| disabled_storage_engines         |        |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+
4 rows in set (0.00 sec)

指定數(shù)據(jù)庫(kù)對(duì)象的引擎:
一般是指定某一張表使用哪個(gè)引擎,因?yàn)镸ySQL的表都要依賴于database,所以在此之前,先創(chuàng)建一個(gè)database,如:

mysql> create database testDB;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testDB             |
+--------------------+
5 rows in set (0.00 sec)

如上,就創(chuàng)建成功了一個(gè)名為testDB的數(shù)據(jù)庫(kù),接下來(lái)該系列文章的所有演示,都在testDB中進(jìn)行。
下面,就在testDB中創(chuàng)建一張名為tbl_A的表,表中有三個(gè)字段,分別為id(int 型,自增,主鍵),name(varchar型,長(zhǎng)度為20),descript(varchar型,長(zhǎng)度為80)。指定存儲(chǔ)引擎為MyISAM。

mysql> use testDB;
Database changed
mysql> create table tbl_A(
    -> id int(4) auto_increment,
    -> name varchar(20),
    -> descript varchar(80),
    -> primary key(id)
    -> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.04 sec)

如上所示,MyISAM引擎的表就建成了。

存儲(chǔ)層

最終的數(shù)據(jù)存儲(chǔ)在存儲(chǔ)層。

配置在終端直接操作MySQL

我們每次操作數(shù)據(jù)庫(kù),都要完成以下步驟,先使用mysql -uroot -p登錄到客戶端,然后指定數(shù)據(jù)庫(kù),然后才能在數(shù)據(jù)庫(kù)里對(duì)表進(jìn)行操作,顯得比較繁瑣,因此,可以定義一個(gè)別名,完成以上操作,在之后的操作中,直接使用該別名在終端操作即可,不需要每次都進(jìn)入MySQL客戶端。
如:我們將該別名定義為isql_s,在該命令后直接跟上SQL語(yǔ)句即可操作。配置方法如下:
先使用vim編輯器打開(kāi)~/.bashrc,然后在最下面加上如下一句話:

alias isql_s='mysql -uroot -pcyc2010 -P3306 -DtestDB --auto-rehash -A -e'

以上命令的意思是,定義一個(gè)叫isql_s的別名,代替mysql -uroot -pcyc2010 -P3306 -DtestDB --auto-rehash -A -e命令。

  • 該命令指定mysql用戶為root;
  • -p后面跟的是root用戶密碼;
  • -P后面是端口號(hào),如果是本地的話,默認(rèn)為3306;(注意大小寫(xiě),和密碼的區(qū)別)
  • -D后面是database的名字,我這里指定的是testDB
  • --auto-rehash是自動(dòng)補(bǔ)全,這個(gè)加不加無(wú)所謂;
  • -A代表不預(yù)讀數(shù)據(jù)庫(kù)信息,因?yàn)楫?dāng)數(shù)據(jù)庫(kù)中表特別多時(shí),預(yù)讀數(shù)據(jù)庫(kù)信息會(huì)使得打開(kāi)數(shù)據(jù)庫(kù)特別慢,有了這個(gè)參數(shù),就可以提高打開(kāi)效率。
  • -e代表后面可以直接跟SQL語(yǔ)句。
    見(jiàn)如下圖120行所示:

配置完成后,按:wq!命令退出編輯器,然后使用如下命令,使配置參數(shù)生效:

$ . ~/.bashrc

接下來(lái),就可以演示一下,如何使用isql_s命令直接訪問(wèn)數(shù)據(jù)庫(kù)了。比如我要查本文建的表tbl_A的表結(jié)構(gòu):

chenyc@DESKTOP-Q5J25HR:~$ isql_s "desc tbl_A"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(4)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | YES  |     | NULL    |                |
| descript | varchar(80) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

可以看到,直接就能查詢出來(lái),而不需要重新進(jìn)入數(shù)據(jù)庫(kù),指定database等一系列繁瑣的操作。
使用以上命令時(shí),可以看到一句Warning,該警告信息是說(shuō)在命令行直接輸入密碼是不安全的,這個(gè)并不影響查詢結(jié)果,可以不用管它。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多