其他1-判斷傳入的引數為0或整數的多種思路
MySql筆記
引擎
-
MyISAM
不支援事務、也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有 要求或者以select,insert為主的應用基本上可以用這個引擎來建立表
-
InnoDB
該儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM引擎,寫的處理效率會差一些,並且會佔用更多的磁碟空間以保留資料和索引。
InnoDB儲存引擎的特點:支援自動增長列,支援外來鍵約束
強烈建議:InnoDB
隔離級別
未提交讀(read uncommitted)
A事務已執行,但未提交;B事務查詢到A事務的更新後資料;A事務回滾;---出現髒資料
已提交讀(read committed)
A事務執行更新;B事務查詢;A事務又執行更新;B事務再次查詢時,前後兩次資料不一致;---不可重複讀
可重複讀(repeatable read)
A事務無論執行多少次,只要不提交,B事務查詢值都不變;B事務僅查詢B事務開始時那一瞬間的資料快照;
序列化(serializable)
不允許讀寫併發操作,寫執行時,讀必須等待;
MySql預設級別:(RR)可重複讀
疑問
-
為什麼是可重複讀?
在MySql5.0以前binlog只有statement一種模式。在這種模式下選(RC)已提交讀會出現主從複製不一致的現象,所有選擇了(RR)可重複讀
-
其它資料庫是預設級別是什麼?
Oracle,SqlServer 都是選擇的(RC)已提交讀
-
專案中應該選什麼級別,為什麼?
(RC)已提交讀。
(1) 在RR隔離級別下,存在間隙鎖,導致出現死鎖的機率比RC大的多!
(2) 在RR隔離級別下,條件列未命中索引會鎖表!而在RC隔離級別下,只鎖行
-
在RC級別下,主從複製用什麼binlog模式?
row模式
-
binlog在版本5.0之後有幾種模式?
statement: 記錄的是修改SQL語句
row: 記錄的是每行實際資料的變更
mixed: statement和row模式的混合statement 記錄的是修改SQL語句 日誌檔案小,節約IO,提高效能 準確性差,對一些系統函式不能準確複製或不能複製,如now()、uuid()等 row 記錄的是每行實際資料的變更 準確性強,能準確複製資料的變更 日誌檔案大,較大的網路IO和磁碟IO mixed statement和row模式的混合 準確性強,檔案大小適中 有可能發生主從不一致問題
強烈建議:選RC且binlog用row模式
MySql操作
-
資料庫級別
-- 檢視當前事物級別: SELECT @@tx_isolation; -- 設定mysql的隔離級別: set session transaction isolation level 設定事務隔離級別 -- 設定read uncommitted級別: set session transaction isolation level read uncommitted; -- 設定read committed級別: set session transaction isolation level read committed; -- 設定repeatable read級別: set session transaction isolation level repeatable read; -- 設定serializable級別: set session transaction isolation level serializable;
-
binlog
-- 檢視 binlog 模式 show variables like 'binlog_format' -- 檢視 同步功能 show variables like 'log_bin'; -- 開啟binlog 一般修改/etc/my.inf檔案中 #log_bin log-bin = mysql-bin #開啟binlog binlog-format = ROW #選擇row模式 server_id = 12345 #配置mysql replication需要定義,不能和canal的slaveId重複 show binary logs #獲取binlog檔案日誌列表 show master status # 檢視當前正在寫入的binlog檔案 show master logs # 檢視master上的binlog檔案 show binlog events #檢視第一個binlog檔案內容 show binlog events 'mysql-bin.000002' # 檢視指定binlog檔案內容, 如:檢視mysql-bin.000002檔案內容
表操作
1.新增
INSERT INTO 表名(欄位1,欄位2,欄位...) VALUE(資料1,資料2,資料...);
2.刪除
DELETE SET 表名 WHERE 條件;
3.修改
UPDATE 表名 FROM 欄位=xx WHERE 條件;
4. 查詢
SELECT 欄位1,欄位2,欄位... FROM 表名;