MySQL基礎學習

2021-07-29 17:42:58 字數 1282 閱讀 6788

分為表級鎖, 頁級鎖, 行級鎖

各級別鎖適用的場景:

mysql的表級鎖定主要通過四個佇列來實現:

通過以上四個佇列實現了兩種模式:

表共享讀鎖

表獨佔寫鎖

在實現過程中:不需要顯式加鎖

mysql優化建議: 儘量減少鎖定時間,讓可能併發的操作盡可能併發

即:減少複雜查詢,拆成幾個簡單查詢

建立高效索引

控制字段型別

優化表資料檔案

共享鎖排他鎖

共享鎖:

又名讀鎖,只能讀,不能寫;

可以疊加共享鎖,不可以再疊加別的鎖

用法:sql 後 + lock in share mode 結果集資料會加共享鎖

排他鎖:

某個事務加了排他鎖,則只能該事務進行讀寫,其他事務也不能再加鎖

意向共享鎖、意向排他鎖:

這兩個鎖均用於額外的表級鎖,在加共享鎖時為表加意向共享鎖;可以有多個鎖

加排他鎖時,為表加意向排他鎖只可以有乙個

innodb的行鎖是通過給索引項新增鎖而實現的,只有通過索引進行資料檢索才會用到行鎖,否則全部為表鎖。

若不同行使用了相同的索引鍵,會發生鎖衝突;

有多個索引時,可以使用不同的索引鎖定不同的行;

即使條件中使用了索引,mysql進行執行計畫優化時仍然可能使用表鎖。

當使用範圍查詢時,mysql會為這個範圍加鎖,不論表中是否實際存在該行。

目的:1. 防止幻讀

2. 滿足恢復與複製的要求

mysql 不會出現死鎖,因為他的邏輯是要麼一次獲得全部的鎖,要麼等待。

而innodb是逐步獲得鎖,因此,較易發生死鎖,但是,innodb擁有鎖檢測機制,可以很快地通過該機制發現死鎖,通過回滾小事務來解除死鎖。

但只能發現引擎內部的死鎖,無法識別跨表的死鎖。

連線客戶端時通過引數指定

shell>mysql -uroot -proot --prompt

連線上客戶端後,通過prompt 命令修改

mysql>prompt 提示符

引數

描述\d

完整日期

\d當前資料庫

\h伺服器名稱

\u當前使用者

create [ if not exists] db_name [default] character set [=] charset_name

MYSQL學習基礎

主鍵 primary key 特性 1 唯一識別符號 2 不可重複,不能為空,穩定 3 乙個表可以沒有主鍵,但資料處理會比較難處理,所以一般都要有主鍵 選用途徑 1 業務主鍵 2 邏輯主鍵 推薦 外來鍵 foreign key 啟動服務 services.msc 啟動資料庫 ssms 管理員視窗 n...

MySQL基礎學習

dql語言 data query language 資料查詢語言 select dml語言 data manipulate language 資料操縱語言 insert update delete ddl語言 data define language 資料定義語言 create alter drop...

MySql基礎學習 mysql安裝

linux環境下的安裝 1檢查是否已經安裝 sudo service mysql start mysql unrecognized service 2安裝mysql 安裝 mysql 服務端 核心程式 sudo apt get install mysql server 安裝 mysql 客戶端 su...