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