免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MySQL邏輯分層介紹

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

MySQL邏輯分層

一般來說,MySQL邏輯可分為四個層次,分別為:連接層,服務層,引擎層,存儲層 。

連接層

提供與客戶端連接的服務。
當客戶端發(fā)出一個請求后(如增刪改查的SQL語句),首先到達該層,將服務器與客戶端建立連接。

服務層

服務層分兩個作用:

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

引擎層

引擎層提供各種數據存儲的方式。MySQL的存儲引擎有很多,比較常用的比如有InnoDB, MyISAM

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

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

查詢數據庫支持哪些引擎的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)

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

查看當前數據庫使用的引擎:

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)

指定數據庫對象的引擎:
一般是指定某一張表使用哪個引擎,因為MySQL的表都要依賴于database,所以在此之前,先創(chuàng)建一個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)建成功了一個名為testDB的數據庫,接下來該系列文章的所有演示,都在testDB中進行。
下面,就在testDB中創(chuàng)建一張名為tbl_A的表,表中有三個字段,分別為id(int 型,自增,主鍵),name(varchar型,長度為20),descript(varchar型,長度為80)。指定存儲引擎為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引擎的表就建成了。

存儲層

最終的數據存儲在存儲層。

配置在終端直接操作MySQL

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

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

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

  • 該命令指定mysql用戶為root;
  • -p后面跟的是root用戶密碼;
  • -P后面是端口號,如果是本地的話,默認為3306;(注意大小寫,和密碼的區(qū)別)
  • -D后面是database的名字,我這里指定的是testDB;
  • --auto-rehash是自動補全,這個加不加無所謂;
  • -A代表不預讀數據庫信息,因為當數據庫中表特別多時,預讀數據庫信息會使得打開數據庫特別慢,有了這個參數,就可以提高打開效率。
  • -e代表后面可以直接跟SQL語句。
    見如下圖120行所示:

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

$ . ~/.bashrc

接下來,就可以演示一下,如何使用isql_s命令直接訪問數據庫了。比如我要查本文建的表tbl_A的表結構:

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    |                |
+----------+-------------+------+-----+---------+----------------+

可以看到,直接就能查詢出來,而不需要重新進入數據庫,指定database等一系列繁瑣的操作。
使用以上命令時,可以看到一句Warning,該警告信息是說在命令行直接輸入密碼是不安全的,這個并不影響查詢結果,可以不用管它。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Mysql storage engine 數據庫存儲引擎(MyISAM and InnoDB)
安裝MySQL 5后無法啟動(不能Start service)解決方法小結
mysql數據庫引擎MyISAM和InnoDB的比較和使用場合
Mysql:初識MySQL
Ubuntu: Install and configure a MySQL server
MySQL Storage Engine 小記 - Database - Tech - JavaEye論壇
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服