mysql的深層理解 MySQL深層次的總結

2021-10-19 21:00:15 字數 2335 閱讀 8420

客戶端與伺服器連線 tcp/ip 命名管道和共享記憶體 unix域套接字檔案

處理請求包括:連線管理,解析與優化,儲存引擎

show engines;

create table 表名(

建表語句;

) engine = 儲存引擎名稱;

alter table 表名 engine = 儲存引擎名稱;

啟動選項

配置檔案路徑 配置檔案 defaults-filedefaults-extra-file

使用\`defaults-extra-file\`可以指定額外的配置檔案搜尋路徑,那些固定的配置檔案路徑也會被搜尋

系統變數

show variables like 'default_storag%'

作用範圍分為這兩種:global:全域性變數,影響伺服器的整體操作。

session(local) :會話變數,影響某個客戶端連線的操作。

設定語句一:set global default_storage_engine = myisam;

語句二:set @@global.default_storage_engine = myisam;

語句一:set session default_storage_engine = myisam;

語句二:set @@session.default_storage_engine = myisam;

語句三:set default_storage_engine = myisam;

set 系統變數名 = 值`和`set session 系統變數名 = 值`是等價的

狀態變數

show variables like 'character_set_server';

字符集 和 比較規則(排序規則)的應用

比方說utf8字符集預設的比較規則就是utf8_general_ci。

mysql有4個級別的字符集和比較規則,分別是:伺服器級別

通過啟動選項或者在伺服器程式執行過程中使用set語句修改這兩個變數的值

[server]

character_set_server=gbk

collation_server=gbk_chinese_ci

資料庫級別

mysql> create database charset_demo_db

-> character set gb2312

-> collate gb2312_chinese_ci;

query ok, 1 row affected (0.01 sec)

表級別mysql> create table t(

-> col varchar(10)

-> ) character set utf8 collate utf8_general_ci;

query ok, 0 rows affected (0.03 sec)

列級別create table 表名(

列名 字串型別 [character set 字符集名稱] [collate 比較規則名稱],

其他列...

alter table 表名 modify 列名 字串型別 [character set 字符集名稱] [collate 比較規則名稱];

編譯碼有關的系統變數character_set_client

伺服器解碼請求時使用的字符集

character_set_connection

伺服器執行過程中使用的字符集

character_set_results

伺服器向客戶端返回資料時使用的字符集

設定set names 字符集名; => 可以同時設定三個系統變數

配置檔案 設定啟動選項[client]

default-character-set=utf8

innodb

4種不同型別的行格式,分別是compact、redundant、dynamic和compressed行格式

create table 表名 (列的資訊) row_format=行格式名稱

alter table 表名 row_format=行格式名稱頁是mysql中磁碟和記憶體互動的基本單位,16kb, 也是mysql是管理儲存空間的基本單位。

compact

如果該可變字段允許儲存的最大位元組數(m×w)超過255位元組並且真實儲存的位元組數(l)超過127位元組,則使用2個位元組,否則使用1個位元組。

變長字段長度列表中只儲存值為非null的列內容占用的長度,值為null的列的長度是不儲存的

redundant 記錄的是偏移,沒有null值列表

dynamic,compressed不會在真實資料處儲存字串的前768個字,只記錄在其他頁面的位址

compressed會使用演算法壓縮

堆和棧深層理解

一 堆和棧的概念區別 堆 是大家共有的空間,分全域性堆和區域性堆。全域性堆就是所有沒有分配的空間,區域性堆就是使用者分配的空間。堆在作業系統對程序 初始化的時候分配,執行過程中也可以向系統要額外的堆,但是記得用完了要還給作業系統,要不然就是記憶體洩漏。堆裡面一般 放的是靜態資料,比如static的資...

深層理解 棧平衡原理

深層理解 棧平衡原理 底層是如何實現棧平衡的?在ios android作業系統中,經常會遇到入棧出棧的操作。那麼現在作業系統已經不需要我們去關心堆疊的操作。比如 ios中的arc模式,android中的jvm都會幫我們自動釋放記憶體,自動保持堆疊平衡。但是對於開發者來說,還是很有必要掌握堆疊平衡原理...

android中Logcat的深層理解

android的開發也可以歸類為嵌入式裝置的開發,即便不是嵌入式開發,依然要注意對記憶體和處理的使用。養成乙個好的習慣對自己的幫助是很大的。在log的原始碼中可以看到這樣的注釋 the order in terms of verbosity,from least to most is error,w...