MySQL中的DDL(Data Definition Language,資料定義語言)

鷹頭貓發表於2018-03-13
  1. create(建立表)

    標準的建表語句:
    create table [模式名.]表名
    (
        #可以有多個列定義
        columnName1 dataType [default expr(這是預設值)],
        ...
    )

    圓括號裡可以包含多個列定義,每個列定義之間用英文逗號(,)隔開,最後一個列定義不需要逗號,直接以圓括號結束。

    建立表只是建立表結構,就是定義資料表有多少列,列包含列名、類型別、可選的預設值(使用default關鍵字定義)。
    
    
    MySQL支援的列型別
    列型別 說明
    tinyint/smallint/mediumint/int(integer)/bigint
    1位元組/2位元組/3位元組/4位元組/8位元組正數,又可分為有符號和無符號兩種。 這些正數型別的區別僅僅是表數範圍不同。
    float/double   
     單精度、雙精度浮點型別
    decimal(dec)       
     精確小數型別,相對於float和double不會產生精度丟失問題
    date 
     日期型別,不能儲存時間。把java.util.Date物件儲存進date列時,時間部分將丟失
    time   
     時間型別,不能儲存日期。把java.util.Date物件儲存進time列時,日期部分將丟失
    datetime    
     日期、時間型別
    timestamp        
     時間戳型別
    year    
     年型別,僅僅儲存時間的年份
    char 
     定長字串型別
    varchar   
     可變長度字串型別
    binary    
     定長二進位制字串型別,它以二進位制形式儲存字串
    varbinary   
     可變長度的二進位制字串型別,它以二進位制形式儲存字串
    tinyblob/blob/mediumblob/longblob  
     1位元組/2位元組/3位元組/4位元組的二進位制大物件,可用於儲存圖片、音樂等二進位制資料,分別 可儲存:255B/64KB/16MB/4GB的大小
    tinytext/text/mediumtext/longtext
     1位元組/2位元組/3位元組/4位元組的文字物件,可用於儲存超長長度的字串,分別可儲存: 255B/64KB/16MB/4GB大小的文字
    enum(`value1`,`value2`,...)
     列舉型別,該列的值只能是enum後括號裡多個值的其中之一
    set(`value1`,`value2`,...)
    集合型別,該列的值可以是set後括號裡多個值的其中幾個
    
    
    #例句:
    create table t_test
    (   #整形通常用int
        test_id int,
        #小數定義
        test_price decimal,
        #定義普通文字,使用default關鍵字指定預設值
        test_name varchar(255) default `xxx`,
        #定義大文字型別
        test_desc text,
        #定義圖片
        test_img blob,
        #定義日期
        test_date datetime
    );

    上面這種常見的建表語句只是建立一個空表,該表裡沒有任何資料。

    如果使用子查詢建表語句,則可以在建表的同時插入資料。 語法如下:
    create table [模式名.]表名 [column1[, column2, ...] as subQuery;

    上面語法中新表的欄位列表必須與子查詢中的欄位列表數量匹配,建立新表時的欄位列表可以省略,如果省略了該欄位列表,則新 表的列名與選擇結果完全相同,如下:
    create table user2 as select * from user;

    上面的語句相當於把user表複製了一份,取名為user2。

     
  2. alter(修改表結構)
    包括增加列定義、修改列定義、刪除列、重新命名列等
    增加列定義:
    alter table tableName add
    (
        #可以有多個列定義
        columnName dataType [default expr],
        ...
    );

    上面的語句表示將圓括號裡的列追加到指定表的列定義後面。如果只是新增一列,則可以省略圓括號。
    #例句:
    #為t_test表增加一個add_id欄位,該欄位的型別為int
    alter table t_test add add_id int;

    #為t_test表增加add_name、add_address欄位,型別都為varchar
    alter table t_test add ( add_name varchar(255) default `this is name`, add_address varchar(255) );
    
    
    注意:SQL語句中的字串不是用雙引號,而是用單引號;增加欄位時,如果資料表中已有資料記錄,除非給新增的列指定了預設值,
    否則新增的資料列不可指定為非空約束,因為那些已有的記錄在新增列上肯定是空。 (只要新增的約束與已有的資料衝突,修改資料表結構就會失敗)。


    修改列定義:
    alter table tableName modify columnName dataType [default expr] [first | after columnName];

    上面語法中的first或者after columnName表示將目標列修改到指定的位置。
    #例句:
    
    #將t_test表中的add_id列的型別修改成varchar(255)型別
    alter table t_test modify add_id varchar(255);
    
    
    #將t_test表中的add_name列修改成int型別
    alter table t_test modify add_name int;


    刪除列定義:
    alter table tableName drop columnName;

    刪除列,只需要在drop關鍵字後跟上要刪除的列名即可。
    #刪除t_test表中的add_name列
    alter table t_test drop add_name;


    重新命名資料表名:
    alter table tableName rename to newTableName;
     
    #例句:
    #將t_test資料表重新命名為t_demo
    alter table t_test rename to t_demo;


    重新命名資料表中的列名:
    alter table tableName change
        old_column_name new_column_name dataType [default expr] [first | after column_name];
     

  3. drop(刪除表)
    #語法:
    drop table tableName;
     
    #例句:
    #刪除t_demo資料表
    drop table t_demo;
    
    
    注意:刪除資料表後,表結構被刪除,表物件不再存在;表裡的所有資料也被刪除;該表所有相關的索引、約束也被刪除。


  4. truncate(截斷表)
    刪除表裡的全部資料,但保留表結構。truncate只能一次性刪除整個表的全部記錄。
    #語法:
    truncate tableName;

     

    
    

相關文章