MySQL學習筆記-3

  1. DML數據操縱語言html

    • 1.1 向表中插入數據 關鍵字 insertmysql

      • ① 寫法1sql

        insert into tab_name [(字段1,字段2,...)]
        values (v1,v2,...)[,(v1,v2,...),... ];
        • (字段1,字段2,...)必須與(v1,v2,...)在數量,類型上一一對應。
        • (字段1,字段2,...)能夠省略,固然此時後面的values(v1,v2,...)必須與原表各字段對應,即便爲空也要標識出來:Null
        • 支持多行插入,支持子查詢語句。
      • ② 寫法2數據庫

        insert into tab_name [(字段1,字段2,...)]
        select v1,v2,... union
        select v1,v2,... union
        select ...  ;#union 聯合多個子句執行
      • ③ 寫法3session

        insert into tab_name
        set 字段1 = v1,字段2 = v2 , ....  ;
    • 1.2修改(更新)表中數據 關鍵字 update併發

      • ①單表app

        update tab_name 
        set 字段1 = v1,字段2 = v2,...
        where 條件;
      • ② 多表ui

        update table_1_name 別名
        [left/right/full ]join table_2_name 別名 on 鏈接條件
        set 字段1 = v1 , 字段2 = v2 , ...
        where 篩選條件;
    • 1.3刪除表中數據 關鍵字 deletespa

      • ①單表code

        delete from tab_name 
        [where 篩選條件];
      • ② 多表

        delete tab_1_rename [, tab_2_rename]
        from tab_1_name  as tab_1_rename 
        [inner/left/right/full] join tab_2_name as tab_2_rename on 鏈接條件
        [where 篩選條件];
      • ③ 直接刪除整張表的數據值 關鍵字 Truncate

        Truncate [table ]tab_name ;
        #嚴格來說 truncate同drop同樣屬於DDL,不屬於DML
        #truncate 不支持回滾,只能做用於表,效果至關於drop+create table 的執行結果。
        #truncate 操做執行後,具備自增值屬性的列的值會從1從新開始自增,而delete是接斷點續增。
        #truncate後會使表和索引所佔用的空間會恢復到初始大小;delete操做不會減小表或索引所佔用的空間,drop語句將表所佔用的空間全釋放掉。
        #truncate 執行後無返回值:‘共0行受到影響’

        詳細細節可參考博客園MySQL技術的文章,較全面。

    • 1.4查詢表中數據 關鍵字 select

      ​ 條件查詢,分組查詢,鏈接查詢,聯合查詢,子查詢,排序,分頁查詢等。

  2. DDL數據定義語言

    • 2.1數據庫

      • ①建立數據庫 create database [if not exists] database_name ;

      • ②修改數據庫

        • 數據庫通常不建議/不能夠進行重命名操做

        • 修改數據庫字符集 &排序規則

          alter database database_name  character set char_set_name
          collation 與字符集對應的匹配的collation_name;
      • ③ 刪除數據庫 drop database [if exists] database_name;

    • 2.2表

      • ①建立表

        create table [if not exists]tab_name(
        字段1 字段類型 其餘限制 ,
        字段2 字段類型 其餘限制 ,
        ...);
        
        desc tab_name ; # 查看錶的結構
      • ②修改表

        • 修改列名 關鍵字change

          alter table table_name 
          change [column] colname re_colname col_type [其餘限制]
          #此操做能夠修改列的每一個屬性,可是,修改列的某一屬性時,其餘限制條件也不能省略,省略即意味着會自動恢復爲默認值,而不是保持當前設置不變。
        • 修改列的數據類型/其餘限制 關鍵字 modify

          alter table tab_name 
          modify [column] colname new_coltype [其餘限制]
          #modify 能夠修改除col_name 外的全部列屬性,一樣,須要設置全面,不能缺省,不然缺省屬性會恢復默認值。
        • 添加/刪除 列 關鍵字 add / drop

          alter table tab_name add [column]  col_name col_type [其餘限制] 
          [frist/after col_name]; 
          
          alter table tab_name drop [column] [if exists] col_name;
        • 修改表名(重命名) 關鍵字 rename to
          alter table tab_name rename to new_tab_name ;

      • ③刪除表 關鍵字 drop
        drop table [if exists] tab_name ;

      • ④表的複製

        #複製整個表的結構
        create table new_cop_tab_name like org_tab_name;
        
        #複製表的部分結構
        create table new_cop_tab_name from
        select 字段1,字段2 
        from org_tab_name
        where 1=2 或者 where 0; 
        
        #將表的結構與數據值同時複製。
        create table new_cop_tab_name
        select */字段1,字段2,... 
        from org_tab_name
        [where clause];
  3. 數據類型

    MySQL supports SQL data types in several categories: numeric types, date and time types, string (character and byte) types, spatial types, and the JSON data type.

    MySQL支持的數據類型有:數值型,時間型,字符串類型,地理空間類型,JSON類型(詳細參見手冊11章 Data Types)

    • 3.1數值型

      MySQL supports all standard SQL numeric data types. These types include the exact numeric data types (INTEGER, SMALLINT, DECIMAL, and NUMERIC), as well as the approximate numeric data types (FLOAT, REAL, and DOUBLE PRECISION). (詳細參見手冊11.1節)

      ① 各類大小的 int 型 ,包括tinyint,smallint ,mediumint , int(interger),bigint .定義時默認爲signed有符號數,若需定義無符號數(非負數)直接在面空格添加關鍵字unsigned
      例:col_name int unsigned;
      col_name int (8) zerofill unsigned 其中unsigned 能夠省略,若賦值位數低於指定位數將自動用零填充。② 精確小數型。decimal(總有效位數m,小數點後的位數d) 。例如:decimal(5,2)可表示的數值範圍爲-999.99-999.99。 關鍵字decimal 等價於 numeric 。超出範圍會收到警告。m,d皆可省略,默認分別值分別爲10,0
      ③ 近似浮點型。 不建議使用,未來版本中將會移除該數據類型。
      ④ bit型 bit(m) 其中m指的是比特位數,支持1-64。爲特定位數的bit型數據賦值時不足自動右面補零。

    • 3.2 字符串型

      The string data types are CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, and SET. (詳細參見手冊11.3節)

      ​ ① char(m) ,varchar(m) 分別表示固定/自適應長度的字符串類型。char(m) 中'(m)'能夠缺 省,默認爲1。varchar(m)中'm'表示支持的最大長度。
      ​ ② binary(m),varbinary(m) 含義基本同上,只不過是表示二進制值。
      ​ ③ text,blob 用於表示較長的二進制字符串文本。
      ​ ④ enum,set 枚舉型數值。有所類似,有所區別。

    • 3.3 時間類型

      The date and time data types for representing temporal values are DATE, TIME, DATETIME, TIMESTAMP, and YEAR. Each temporal type has a range of valid values, as well as a 「zero」 value that may be used when you specify an invalid value that MySQL cannot represent. 詳細參加手冊11.2節

      其中datetime ,timestamp 處理所佔字節數不同(分別爲8,4),表示範圍不同外,timestamp 還與特定的時區有關(系統變量time-zone) ,不一樣類型的now()能夠體現。

    • 3.4 地理空間類型(spatial data type ), JSON數據類型 參見手冊11.4 , 11.5節。

  • 3.5 其餘有關細節請翻閱手冊11章
  1. 常見約束

    • 4.1 能夠區分爲表級約束列級約束,也能夠具體分爲六大約束

      • not null (保證該字段非空), default (保證該字段設置爲默認值), primary key (保證該字段具備惟一性,且非空), unique(用於保證該字段具備惟一性,能夠爲空值),check約束(用於檢查字段值是否符合條件,MySQL中兼容check約束語法,可是實際無效。),foreign key(用於保證(從表的)該字段的值必須來自於主表的關聯列的值 ,語法:[foreign key(字段名)] reference 主表名(字段名) )

      • 表級約束

        #位置 :在各個字段明確完畢後
        # 表級約束不支持not null 與default
        [constraint cons_name ] cons_type(字段名[,字段名])
      • Primary Key 與 Unique 對比

        是否保證列值惟一性 是否容許爲空 一個表中容許有多少個該約束存在 是否容許組合
        主鍵 × 最多一個 √但不建議
        惟一 能夠有多個 √但不建議

        是否容許組合是指,多個字段聯合起來做爲一個總體具備 主鍵/惟一約束

      • 外鍵約束

        ① 8.0 MySQL的默認engine爲InnoDB, 該引擎支持外鍵(MyISAM不支持,參見博客)。
        ② 外鍵約束是設置在從表中的字段中的;從表的外鍵字段的類型與主表的對應字段的類型必須一致或兼容,對於名稱的一致性無要求;
        ③ 主表的對應字段必須是一個索引(通常爲主鍵或惟一)
        ④ 插入數據時:先主表後從表;刪除數據時:先從表後主表;若添加外鍵時註明on delete cascade,則能夠直接直接刪除主表中的數據(級聯刪除);註明on delete set null能夠在刪除主表的同時將從表中的對應值置爲指定值 .
        ⑤ 具體語法

        #列級語法
        col_name int references main_table_name(主表中對應的col_name)
        #表級語法
        [constraint def_cons_name] foreign key(須要設置外鍵從表col_name) references main_table_name(主表對應的col_name)
      • 修改/添加約束

        #通用:列級添加約束
        alter table tab_name modify column col_name col_type constr	_name;
        #特殊的:表級添加約束
        alter table tab_name add [constraint def_cons_name] 
        primary key(col_name) 或 
        unique(col_name)或 
        check(具體約束)或 
        foreign key(col_name) references tab_name(col_name) [on delete cascade];
        #刪除非空/默認/自增加:  直接modify時省略便可
        #刪除主鍵
        alter table tab_name drop primary key;#無需具體指定列名
        #刪除惟一 
        alter table tab_name drop index col_name;
        #刪除外鍵
        alter table tab_name drop foreign key col_name ;
    • 4.2 查看錶中索引:show index from stuinfo;

    • 4.3 標識列/自增加列

      • 關鍵字 auto_Increment
      • 相關係統變量
        ① auto_increment_offset(實際不生效,但能夠經過實際執行插入操做時手動設置起始值);
        ② auto_increment_increment(每次的增加步長)
      • 只適用於具備主鍵/外鍵/惟一等這些約束的列;一個表中最多隻能有一個標識列(自增加列);標識列的類型只能是數值型。
  2. TCL事務控制語言

    • 5.1 事務:一個或一組sql語句組成一個執行單元,這些語句之間相互依賴,這個執行單元要麼所有執行,要麼所有不執行(某條執行失敗,整個單元將會回滾,回覆執行以前的狀態)。
    • 5.2 show engines 查看當前mysql 支持的引擎類別具體信息。
    • 5.3 事務的ACID屬性:原子性(Atomicity) , 一致性(Consistency) , 隔離性(Isolation各事務之間的執行是相互隔離的不會相互干擾),持久性(Durability,事務一旦被執行,它對數據庫的改變就是永久性的。)
    • 5.4 事務的分類
      ①. 隱式事務:沒有明顯的開啓或結束標誌,例如常見操做:insert ,delete ,update語句
      ②. 顯示事務:事務具備明顯的開啓或結束標誌。 必須將系統變量autocommit設置爲off,禁用自動提交:set autocommit=0;
    • 5.5 具體步驟
      ① 開啓事務 set autocommit = 0 ;start transaction;
      ②具體語句:insert,update,delete clause;
      ③ 結束事務:commit; 或者rollback;
    • 5.6 併發事務
      • 一個事務與其餘事務隔離的程度稱爲隔離級別。數據庫規定了多種事務隔離級別,不一樣隔離級別對應不一樣的干擾程度,級別越高,數據一致性就越好,但也意味着併發性越弱。
      • MySQL支持四種隔離級別:read uncommitted ; read committed ;repeatable read (通常爲默認級別);serializable read.
      • 常見的併發問題:① 髒讀(一個事務讀取了另外一個事務尚未提交的更新後的數據) ②不可重複讀(一個事務屢次讀取某數據時結果不一致) ③ 幻讀 (一個事務讀取了另外一個事務尚未提交的插入後的數據)
      • image-20210128205954044
      • 能夠經過命令select @@tx_isolation;來查看當前當前設置的隔離級別;
      • 設置當前會話的隔離級別set session transaction isolation level 隔離級別;
        設置數據庫系統的全局隔離級別set global transaction isolation level 隔離級別
      • savepoint 節點名 ,搭配 'rollback to 節點名 ' 使用
  3. 視圖

    • 6.1 視圖是一種虛擬存在的表,並且是在使用視圖自己的過程當中動態生成的。應用場景:多個地方用到一樣的查詢結果&該查詢結果所使用的sql語句較爲複雜。能夠相似理解爲暫時性的將通用的sql語句打包起來。

    • 6.2 語法

      #建立視圖
      create view view_name as
      具體的通用的查詢語句;
      #使用視圖
      select 字段 from view_name where等子句(當前的特殊查詢條件)
      
      #修改視圖
      create or replace view view_name as 或者 alter view view_name as 
      具體的sql語句;
      
      #刪除視圖
      drop view view_name;
      #查看視圖
      DESC view_name ; 或者  select create view view_name ;
      
      #能夠對視圖中的數據進行手動的的插入/刪除,對視圖進行 更新(修改) 存在不少限制,通常會報錯。一旦成功,與視圖相關的原始表中的數據也會隨之修改。
      insert into view_name [字段] values (具體的值);
      update view_name set 字段= 字段值 where 條件;
      delete view_name where 條件;

相關文章
相關標籤/搜索