MySQL資料庫要點彙總

2021-10-09 00:12:50 字數 2934 閱讀 7189

唯一鍵允許空值而主鍵不允許,並且主鍵作為每個元組的身份證;

唯一鍵(新增約束為unique的字段)的設定:

1、通過sql語句設定

2、視覺化介面通過新增索引方式設定:

當插入行資料主鍵重複,則會報異常,不會覆蓋。要想出現主鍵重複覆蓋,可以使用replace語句代替insert。

count(1)與count(*)作用相等,獲取符合條件的記錄數,根據mysql優化器確認所走的索引。count(非主鍵字段),只獲取符合條件記錄中該非關鍵字段不為null的記錄數。

mysql優化器根據表索引為count(*)、count(主鍵)與count(1)選擇索引:有二級索引則優化選擇二級索引,無則走主索引。

參考文獻:使用count(*),count(主鍵),count(1)時,是走主鍵索引還是二級索引

select distinct表示查詢到的記錄不重複(記錄中的所有值作為乙個非重複主體)

distinct標註在函式中的字段前,如count(distinct name)表示只計算符合條件的所有記錄中name欄位不為null的記錄數。

mysql中,innodb資料庫引擎預設只在通過索引條件查詢資料時加行級鎖,否則加表級鎖。oracle則直接加行級鎖。加鎖方式:mysql中語句加鎖屬於自動加鎖(select語句加共享鎖,insert、delete、update語句加排他鎖)。手動加鎖可以在sql語句後加「lock in share mode」與「for update」,分別表示共享鎖與排他鎖。

在資料庫中進行鎖等待時間設定,若超時則執行的sql語句報異常,如

set global innodb_lock_wait_timeout=100;//資料庫中設定鎖超時時間
匯入了spring-boot-starter-jdbc與spring-boot-starter-jpa依賴包即可在springboot容器中引入事務管理器。通過@enabletransactionmanager啟動事務管理。

@transaction標註在方法上,預設方法執行完畢,執行commit提交事務。

@transaction可以通過屬性設定,設定隔離級別、超時等待時間、傳播行為等。

@transaction標註的方法中也可手動呼叫提交與回滾。

canal:基於 mysql 資料庫增量日誌解析,提供增量資料訂閱和消費。通過mysql的歸檔日誌binlog,canal將訊息佇列與mysql進行了歸檔日誌訂閱,即mysql進行操作,就會傳送訊息到訊息佇列。springcloud對訊息佇列進行監聽即可獲取資料庫操作資訊。

參考博文1:springboot下資料來源事務使用

參考博文2:mysql:innodb行/表級鎖實現/事務

參考博文3:mysql實現加鎖機制

參考博文4:mysql--canal--rabbitmq實時同步監聽配置示例

日誌:redo log重做日誌、bin log歸檔日誌、undo log撤銷日誌。

redo log、bin log、undo log共同點:都儲存了資料庫已提交與未提交的修改資料。

redo log:用於系統宕機後,進行資料的恢復,大小有限,迴圈使用,記錄有刷盤點。

bin log:常用於主從複製與資料恢復,大小不限,未記錄有刷盤點。

undo log:用於事務異常或呼叫rollback執行的資料回滾。

資料庫儲存---日誌與磁碟:

日誌和磁碟做為資料庫資料儲存,使用了 mysql 裡的 wal 技術,wal 的全稱是 write-ahead logging,它的關鍵點就是先寫日誌,再寫磁碟。

具體來說,當有一條記錄需要更新的時候,innodb 引擎就會先把記錄寫到 redo log(redolog buffer)裡面,並更新記憶體(buffer pool),這個時候更新就算完成了。同時,innodb 引擎會在適當的時候(如系統空閒時),將這個操作記錄更新到磁碟裡面。

參考博文:為什麼 redo log 具有 crash-safe 的能力,是 binlog 無法替代的?

參考博文:mysql日誌系統:redo log、binlog、undo log 區別與作用

基本限制在三個部分:cpu、磁碟、網路。

並不是資料庫連線池越大越好,連線池在理想情況下與cpu核心數相同即能發揮最大效能。但現實開發過程中往往因磁碟與網路的限制,連線池連線數需要設定大於cpu核心數才能發揮最大效能。一般連線池連線數設定公式如下:連線數=(cpu核心數*2)+有效磁碟數。

參考文獻:執行緒池和資料庫連線池設定合適 的大小

大部分事務隔離級別預設未read commited,mysql事務隔離級別預設未repeatable read

通過如下**可以設定事務隔離級別(read uncommitted可同等替換為read committed等其他隔離級別) :

set session transaction isolation level read uncommitted;
事務安全級別最高的是serializable序列化,但其發揮作用的場景是當乙個事務訪問時,其他事務的寫操作會被掛起。缺點也很明顯,這是隔離級別中最嚴格的,但是這樣做勢必對效能造成影響。

參考文獻:五分鐘搞清楚mysql事務隔離級別

MySQL資料庫知識彙總

mysql資料庫安裝 資料庫設計及規範 mysql mysq建表中的字段約束 mysql命令列基本操作 mysql 增 insert into 表名 欄位1,欄位2,欄位3 values 值1,值2,值3,刪 delete from 表名 where 限定條件 改 update 表名 set 欄位1...

MySQL資料庫解壓版,配置要點

要點一 系統環境變數配置。目的 cmd中,可以在任何的工作目錄下可以啟動bin目錄下的mysql程式,就類似於calc notepad等。操作 將mysql的解壓的目錄下的bin目錄的路徑新增到path裡。要點二 mysql配置檔案設定。目的 啟動mysql所需要的配置資訊。操作 預設的配置檔案是m...

Mysql資料庫使用的注意要點

每一條都是來自一線的實戰經驗 每一條都是背後血淋淋的教訓,不要華麗,只要實用。盡量不在資料庫做運算 比如md5 order by rand 拒絕3b big sql,big transaction,big batch 控制單錶的資料量 將字元轉化為數字 比如用int儲存ip位址,而不是char 15...