1. 程式人生 > 其它 >MySQL之senior(七)——資料庫DDL與DML

MySQL之senior(七)——資料庫DDL與DML

MySQL之senior(七)——資料庫DDL與DML

DDL (針對表結構)create drop alter

  1. 建表的語法格式:(建表屬於DDL語句,DDL包括:create drop alter )

    create table 表名(
        欄位名1 資料型別, 
        欄位名2 資料型別, 
        欄位名3 資料型別
    );
    ​
    drop table (if exists) 表名;
    ​
    alter(少用)
        第一:在實際的開發中,需求一旦確定之後,表一旦設計好之後,很少的進行表結構的修改。因為開發進行中的時候,修改表結構,成本比較高。修改表的結構,對應的java程式碼就需要進行大量的修改。成本是比較高的。這個責任應該由設計人員來承擔!
        第二:由於修改表結構的操作很少,所以我們不需要掌握,如果有一天真的要修改表結構,可以使用工具!
        修改表結構的操作是不需要寫到java程式中的。實際上也不是java程式設計師的範疇。
    ​
  2. mysql資料型別

    varchar(最長255)
        比較智慧,節省空間。
        會根據實際的資料長度動態分配空間。
        優點:節省空間
        缺點:需要動態分配空間,速度慢。
    char(最長255)
        定長字串
        不管實際的資料長度是多少。
        分配固定長度的空間去儲存資料。
        使用不恰當的時候,可能會導致空間的浪費。
        優點:不需要動態分配空間,速度快。
        缺點:使用不當可能會導致空間的浪費。
    ​
        varchar和char我們應該怎麼選擇?
            性別欄位你選什麼?因為性別是固定長度的字串,所以選擇char。
            姓名欄位你選什麼?每一個人的名字長度不同,所以選擇varchar。
            
    int(最長11)   數字中的整數型。等同於java的int。
    bigint       數字中的長整型。等同於java中的long。
    float        單精度浮點型資料
    double       雙精度浮點型資料
    date         短日期型別
    datetime     長日期型別
    clob
        字元大物件
        最多可以儲存4G的字串。
        比如:儲存一篇文章,儲存一個說明。
        超過255個字元的都要採用CLOB字元大物件來儲存。
        Character Large OBject:CLOB
    blob
        二進位制大物件
        Binary Large OBject
        專門用來儲存圖片、聲音、視訊等流媒體資料。
        往BLOB型別的欄位上插入資料的時候,例如插入一個圖片、視訊等,
        你需要使用IO流才行。

DML(針對表資料) insert,delete,update

  1. 三個函式

    # format(欄位名, '格式')     格式化數字
    select ename,format(sal, '$999,999') as sal from emp;
    ​
    # str_to_date:將字串varchar型別轉換成date型別 (通常使用在插入insert方面)
    #語法格式:str_to_date('字串日期', '日期格式')
    # mysql的日期格式:
    #           %Y  年
    #           %m  月
    #           %d  日
    #           %h  時
    #           %i  分
    #           %s  秒
    錯誤:insert into t_user(id,name,birth) values(1, 'zhangsan', '01-10-1990');   #birth為date型
    正確:insert into t_user(id,name,birth) values(1, 'zhangsan', str_to_date('01-10-1990','%d-%m-%Y'));
    ​
    # date_format:將date型別轉換成具有一定格式的varchar字串型別。(這個函式通常使用在查詢日期方面)
    # date_format(日期型別資料, '日期格式')
    select id,name,date_format(birth, '%m/%d/%Y') as birth from t_user;
    ​
    #如果提供的日期字串是  %Y-%m-%d  格式,str_to_date與date_format 函式就不需要了,自動轉換
  2. insert,update,delete

    insert
    語法格式:
    一條: insert into 表名(欄位名1,欄位名2,欄位名3...) values(值1,值2,值3);
    多條: insert into t_user(欄位名1,欄位名2) values(),(),(),();
            
    update
    語法格式:
        update 表名 set 欄位名1=值1,欄位名2=值2,欄位名3=值3... where 條件;  
       //沒有條件限制會導致所有資料全部更新
    delete
    語法格式:
            delete from 表名 where 條件;  //沒有條件,整張表的資料會全部刪除!

其他

date和datetime兩個型別的區別?
      date是短日期:只包括年月日資訊。
      datetime是長日期:包括年月日時分秒資訊。
在mysql當中怎麼獲取系統當前時間?
      now() 函式,並且獲取的時間帶有:時分秒資訊,是datetime型別的。

對錶的快速操作

# 快速建立表(瞭解)
    create table emp2 as select * from emp; # as可省略
    # 原理:
    #     將一個查詢結果當做一張表新建;這個可以完成表的快速複製;表創建出來,表中的資料也存在。
# 將查詢結果插入到一張表當中(瞭解)
    insert into dept_bak select * from dept; # 查詢結果與待插入表列屬性需要匹配
# 快速刪除表中的資料(掌握)
    truncate table dept_bak; 
    # delete語句刪除資料的原理?(delete屬於DML語句)
    #   表中的資料被刪除了,但是這個資料在硬碟上的真實儲存空間不會被釋放
    #   這種刪除缺點是:刪除效率比較低。
    #   這種刪除優點是:支援回滾,後悔了可以再恢復資料
    
    # truncate語句刪除資料的原理?
    #   這種刪除效率比較高,表被一次截斷,物理刪除。
    #   這種刪除缺點:不支援回滾。
    #   這種刪除優點:快速。