乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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)似文章 更多