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

來源:互聯網
上載者:User

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

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

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;

本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151360.htm

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.