1. 程式人生 > 實用技巧 >其他1-判斷傳入的引數為0或整數的多種思路

其他1-判斷傳入的引數為0或整數的多種思路

MySql筆記

引擎

  1. MyISAM

    不支援事務、也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有 要求或者以select,insert為主的應用基本上可以用這個引擎來建立表

  2. 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)可重複讀

疑問

  1. 為什麼是可重複讀?

    在MySql5.0以前binlog只有statement一種模式。在這種模式下選(RC)已提交讀會出現主從複製不一致的現象,所有選擇了(RR)可重複讀

  2. 其它資料庫是預設級別是什麼?

    Oracle,SqlServer 都是選擇的(RC)已提交讀

  3. 專案中應該選什麼級別,為什麼?

    (RC)已提交讀。

    (1) 在RR隔離級別下,存在間隙鎖,導致出現死鎖的機率比RC大的多!

    (2) 在RR隔離級別下,條件列未命中索引會鎖表!而在RC隔離級別下,只鎖行

  4. 在RC級別下,主從複製用什麼binlog模式?

    row模式

  5. binlog在版本5.0之後有幾種模式?

    statement: 記錄的是修改SQL語句
    row: 記錄的是每行實際資料的變更
    mixed: statement和row模式的混合

    statement 記錄的是修改SQL語句 日誌檔案小,節約IO,提高效能 準確性差,對一些系統函式不能準確複製或不能複製,如now()、uuid()等
    row 記錄的是每行實際資料的變更 準確性強,能準確複製資料的變更 日誌檔案大,較大的網路IO和磁碟IO
    mixed statement和row模式的混合 準確性強,檔案大小適中 有可能發生主從不一致問題

強烈建議:RCbinlogrow模式

MySql操作

  1. 資料庫級別

    -- 檢視當前事物級別:
    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;
    
  2. 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 表名;