資料庫學習之九:mysql 存儲引擎

来源:https://www.cnblogs.com/cuiyongchao007/archive/2020/05/08/12853199.html
-Advertisement-
Play Games

九、mysql 存儲引擎 1、課程大綱 2、mysql存儲引擎介紹 3、mysql存儲引擎種類 4、資料庫的存儲引擎 存儲引擎查詢 存儲引擎的配置: 配置存儲引擎: 5、innodb體繫結構: 表空間: 共用表空間:主要存放系統元數據 獨立表空間:主要存放用戶數據 邏輯概念,數據存儲的概念 表空間數 ...


九、mysql 存儲引擎

1、課程大綱

存儲引擎的介紹

mysql中的存儲引擎分類

mysql存儲引擎設置

mysql,innodb引擎存儲結構

mysql中的事物

mysql中的鎖

2、mysql存儲引擎介紹

mysql存儲引擎介紹
文件系統:
操作系統組織和存取數據的一種機制。
文件系統是一種軟體。
類型:ext2,3,4,xfs數據:
不管使用什麼文件系統,數據內容不會變化
不同的是,存儲空間,大小,速度
mysql引擎:
可以理解為,mysql的“文件系統”,只不過功能更加強大。
mysql引擎功能:
除了可以提供基本的存取功能,還有更多功能事物功能,鎖定,備份和恢復,優化以及特殊功能。

3、mysql存儲引擎種類

MySQL 提供以下存儲引擎:
InnoDB
MyISAM
MEMORY
ARCHIVE	
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
還可以使用第三方存儲引擎(TokuDB)。

4、資料庫的存儲引擎

存儲引擎查詢

存儲引擎查詢:
show engines;
select @@default_storage_engine;
show create table city;
show table status like 'city'\G
use information_schema 
select table_schema,table_name,engine from information_schema.tables where table_schema='world';
select table_schema,table_name,engine from information_schema.tables where table_schema='mysql';
select table_schema,table_name,engine from information_schema.tables where engine='csv';

存儲引擎的配置:

查看存儲引擎:
show engines;
select @@default_storage_engine;
mysql> show variables like '%engine%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| default_storage_engine     | InnoDB |
| default_tmp_storage_engine | InnoDB |
| storage_engine             | InnoDB |
+----------------------------+--------+
將存儲引擎設置在配置文件中,重啟mysql生效。

配置存儲引擎:

1、在啟動配置文件中設置伺服器存儲引擎:
[mysqld]
default-storage-engine=<Storage Engine>
2、使用 SET 命令為當前客戶機會話設置:
	SET @@storage_engine=<Storage Engine>;
3、在 CREATE TABLE 語句指定:
	CREATE TABLE t (i INT) ENGINE = <Storage Engine>;

mysql> show variables like '%engine%';
mysql> use world
mysql> create table test3 (id int ) engine=innodb;
mysql> show create table test3;

5、innodb體繫結構:

表空間:

共用表空間:主要存放系統元數據

獨立表空間:主要存放用戶數據

邏輯概念,數據存儲的概念

表空間數據文件:idb文件,在/app/mysql/data/lufei

共用表空間的設置:

預設的配置:
innodb_data_file_path    /application/mysql/data/  ibdata1:12M:autoextend 

共用表空間的設置:
共用表空間設置:

innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

innodb_data_file_path=ibdata1:12M;ibdata2:50M:autoextend    ----錯誤的配置XXX
在 /application/mysql/data/查看idbdata1實際的大小,然後在增加idbdata2的大小,進行擴展。此命令配置在mysql的配置文件中。
innodb_data_file_path=ibdata1:76M;ibdata2:50M:autoextend    -----正確的配置

獨立表空間:

除了系統表空間之外,InnoDB 還在資料庫目錄中創建另外的表空間,用於每個 InnoDB 表的 .ibd 文件。
InnoDB 創建的每個新表在資料庫目錄中設置一個 .ibd 文件來搭配表的 .frm 文件。
可以使用 innodb_file_per_table 選項控制此設置
更改該設置僅會更改已創建的新表的預設值。
	
註:在mysql5.6開始,預設的配置為:
| innodb_file_per_table | ON    |
獨立表空間刪除表空間命令:

alter table testtab discard tablespace;

該命令執行後/app/mysql/data/lufei中的testtab的ibd文件就被刪除。

6、Innodb引擎-事務

組數據操作執行步驟,這些步驟被視為一個工作單元:
用於對多個語句進行分組
可以在多個客戶機併發訪問同一個表中的數據時使用
所有步驟都成功或都失敗:
如果所有步驟正常,則執行
如果步驟出現錯誤或不完整,則取消

事務ACID:
Atomic(原子性)
所有語句作為一個單元全部成功執行或全部取消。
Consistent(一致性)
如果資料庫在事務開始時處於一致狀態,則在執行該事務期間將保留一致狀態。 
Isolated(隔離性)
事務之間不相互影響。
Durable(持久性)
事務成功完成後,所做的所有更改都會準確地記錄在資料庫中。所做的更改不會丟失。

7、mysql事務控制語句

事務中的標準語句:DML語句
insert,update,delete三類事物語句。
如果遇到以上三個命令,都是事物型的操作,都會預設在前面添加begin命令。

START TRANSACTION(或 BEGIN):顯式開始一個新事務
1
2
3
COMMIT:永久記錄當前事務所做的更改
BEGIN
1    打標記a
2    打標記b(savepoint時候)
3
ROLLBACK:取消當前事務所做的更改(回滾到所打的標記)

SAVEPOINT:分配事務過程中的一個位置,以供將來引用
ROLLBACK TO SAVEPOINT:取消在 savepoint 之後執行的更改
RELEASE SAVEPOINT:刪除 savepoint 標識符
SET AUTOCOMMIT:為當前連接禁用或啟用預設 autocommit 模式

保存:commit是自動保存的:

mysql> show variables like "%auto%";
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| auto_increment_increment    | 1     |
| auto_increment_offset       | 1     |
| autocommit                  | ON    |
| automatic_sp_privileges     | ON    |
| innodb_autoextend_increment | 64    |
| innodb_autoinc_lock_mode    | 1     |
| innodb_stats_auto_recalc    | ON    |
| sql_auto_is_null            | OFF   |
+-----------------------------+-------+
8 rows in set (0.00 sec)
需要將自動保存的commit改成關閉:(只修改當前會話)
mysql> set autocommit=0;
查看全局commit配置:
mysql> show global variables like "%auto%";
在有些業務繁忙企業場景下,這種配置可能會對性能產生很大影響,但對於安全性上有很大提高。
將來,我們需要去權衡我們的業務需求去調整是否自動提交。
我們可以通過以下命令進行修改關閉(0是關閉,1是開啟):
SET GLOBAL AUTOCOMMIT=0;  -所有新建會話
SET SESSION AUTOCOMMIT=0; -當前會話
SELECT @@AUTOCOMMIT;      -查看設置結果
我們也可以修改配置文件讓其永久生效:
vi /etc/my.cnf	
[mysqld]
AUTOCOMMIT=0	
隱式提交語句(commit):
用於隱式提交的 SQL 語句:
START TRANSACTION
SET AUTOCOMMIT = 1 
導致提交的非事務語句:
DDL語句:	(ALTER、CREATE 和 DROP)
DCL語句:	(GRANT、REVOKE 和 SET PASSWORD)
鎖定語句:(LOCK TABLES 和 UNLOCK TABLES)
導致隱式提交的語句示例:
TRUNCATE TABLE
LOAD DATA INFILE
SELECT FOR UPDATE
如:
BEGIN
1
2
3

BGEIN(開始之前就預設commit)
1
2
3

8、事務的日誌

Redo是什麼?	
redo,顧名思義“重做日誌”,是事務日誌的一種。
作用是什麼?
在事務ACID過程中,實現的是“D”持久化的作用。
undo是什麼?	
undo,顧名思義“回滾日誌”,是事務日誌的一種。
作用是什麼?
在事務ACID過程中,實現的是“A、C”原子性和一致性的作用。
什麼是“鎖”?
“鎖”顧名思義就是鎖定的意思。
“鎖”的作用是什麼?
在事務ACID過程中,“鎖”和“隔離級別”一起來實現“I”隔離性的作用。
鎖的粒度:
1、MyIasm:低併發鎖——表級鎖
2、Innodb:高併發鎖——行級鎖
四種隔離級別:
READ UNCOMMITTED		
允許事務查看其他事務所進行的未提交更改
READ COMMITTED
允許事務查看其他事務所進行的已提交更改
REPEATABLE READ******
確保每個事務的 SELECT 輸出一致
InnoDB 的預設級別
SERIALIZABLE
將一個事務的結果與其他事務完全隔離

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] 原文鏈接: "joselynzhao·CSDN·MacBook鍵盤鎖定、按鍵失效、無反應等問題" MacBook按鍵無反應 最近被ubuntu虛擬機折騰得夠嗆,關機之後再啟動就各種問題 於是我瞎百度了一波,各種快捷鍵一陣瞎按。 結果就是,我發現的鍵盤失靈了,按什麼鍵都沒有反應。 相應“重 ...
  • 遷移概述 系統的遷移是指把源主機上的 操作系統 和 應用程式 移動到目的主機,並且能夠在目的主機上正常 運行 在沒有虛擬機的時代,物理機之間的遷移依靠的是系統備份和恢復技術。在源主機上實時備份操作系統和應用程式的狀態,然後把存儲介質連接到目標主機上,最後在目標主機上恢復系統。隨著虛擬機技術的發展,系 ...
  • Zabbix 5.0 增加了很多新功能,如:垂直菜單、隱藏菜單、用戶界面中的測試項目、限制代理檢查、查找並替換預處理步驟 ES7支持等等...快來部署體驗一把嘗鮮體驗 Zabbix 5.0 吧 升級須知 升級要求 PHP版本 PHP版本已從最低的5.4.0 升級到 7.2.0 資料庫版本 MySQL ...
  • 在bash shell中,環境變數分為兩類: 全局變數 局部變數 全局環境變數 全局環境變數對於shell會話和所有生成的子shell都是可見的。例如 : 局部環境變數 局部環境變數只能在定義它們的進程中可見。Linux也定義了標準的局部環境變數。 使用 命令可以顯示該進程的所有環境變數,包括 局部 ...
  • [TOC] 前言 1.備份數據的意義 運維工作的核心簡單概括起來就是兩件事:第一個是保護公司的數據,第二個是讓網站能夠7 24小時提供服務。 雖然這兩件事情都很重要,但是相比較而言,丟失一部分數據和讓網站7 24小時提供服務,哪個更重要呢? 對於絕大多數企業來講,失去數據就相當於失去商機,失去產品, ...
  • 2020 5/9 十九、分頁查詢 應用場景:當要顯示的數據,一頁顯示不全,需要分頁提交sql請求 語法:(執行順序已標出) SELECT 查詢列表 ⑦每執行一步都會生成一個虛擬的結果集 FROM 表名 ① [join type join 表2 ② on 連接條件 ③ where 篩選條件 ④ gro ...
  • 十一、mysql 備份恢復 課程大綱 運維工作的核心簡單概括就兩件事: 第一個是保護公司的數據。 第二個是讓網站能7 24小時提供服務(用戶體驗)。 1、備份的類型 冷備份:關閉數據、停止業務 溫備份:枷鎖備份 熱備份:線上備份,不會影響業務。 2、備份方式 邏輯備份: 基於sql語句的備份: ①m ...
  • 十、mysql日誌管理 課程大綱 1、日誌的類型簡介 mysql show variables like '%log_error%';在配置文件中指定錯誤日誌位置。 mysql show variables like '%gen%'; 一般日誌查詢 二進位日誌,記錄修改記錄。 | 日誌文件 | 選項 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...