序言
?在上一篇的數據庫操作的內容中,學習了兩種屬性和常用的七種操作,學習是循序漸進的,庫的操作學完了,就要開始學習表的操作了,而表可與數據強相關,比如DDL
,即數據定義語言,DML
,即數據操縱語言,都是與表相關的,而其區別就在于一個是對表結構的操作,而另一個是對表內容的操作,因此表的操作的內容分為上下兩部分進行講解。鋪墊完畢,好了話不多說,開始今天的學習吧!
1.創建
create table (if not exists) [表名]([變量名1] [類型],[變量名2] [類型],[變量名3] [類型]
)(charset=[字符集],collate=[校驗集],engine=[存儲引擎]);
說明:
- 第一個和第三個
()
的意思表示其中的內容可省略,第二個()
的意思是表的結構都包含哪些類型,不可省略。 - 請注意從開始的變量名到倒數第二個變量名,末尾都帶有
,
,但是最后一個變量名末尾不帶。 - 字符集和校驗集只強調一點,如果沒有設置默認與所在的數據庫設置的對齊。而存儲引擎沒有設置跟MySQL默認的對齊。
- 在MySQL中推薦使用此種類似結構體定義的寫法,可讀性較高,當然也可以采用一行的寫法,具體寫法則根據個人喜好來即可。
如下圖可得:我所在的MySQL下的默認的存儲引擎是InnoDB,通過下圖sql語句可進行查看。
- 給出一個示例:
簡要說明一下,此處的類型暫不做討論,留到后面的文章娓娓道來,而comment
,簡單理解為給類型做注釋,便于用戶理解。
此時進入數據庫所在的目錄/var/lib/mysql/test_db
查看一下創建一個表發生了什么,在前面的文章中提及過創建一個數據庫的本質就是創建一個目錄,創建一個表實際就是在創建文件,那具體創建了什么文件呢?
- 如圖:
說明:
- 以
.sdi
為后綴的文件中存放的表的結構。 - 以
.MYD
為后綴的文件中存放的是表的數據。 - 以
MYI
為后綴的文件中存放的是表的索引。
因此可以看出MyISAM采用的索引是一種非聚集索引,即數據和索引分開進行存儲。
與此同時,再創建一個InnoDB類型的表,再次查看此目錄下的文件與MyISAM進行比較看有什么不同,這里就省略不寫了,就是換一個表名,然后將最后的存儲引擎換成InnoDB。
- 如圖:
相比之下,InnoDB創建的表雖然只建立了一個文件,但這個文件中包含了表的索引和所有數據,因此InnoDB采用的索引是聚集索引。
補充:
- MyISAM,MySQL5.5.8版本之前默認的存儲引擎,不支持事務,采用非聚集索引。
- InnoDB,MySQL數據庫5.5.8版本開始,默認的存儲引擎,支持事務,采用聚集索引。
2.查看
創建信息
show create table [表名];
#一般將末尾的;換成\G打印出來的效果更好。
表結構
desc [表名];
簡要說明一下,Field為字段名稱,Type為類型,Null為是否可以為控制,Key為是否為索引,Default為是否有默認值,Extra為額外信息。
3.修改
表的重命名
alter table [表名] rename to [新表名]#to可省略不寫
如圖:
此處在修改表名其實就是在數據庫的目錄下將其文件的前綴改為usr
。
如圖:
增加列
alter table [表名] add [列名] [類型];
如圖:
修改列屬性
alter table [表名] modiy [列名] [新屬性];
如圖:
刪除列
alter table [表名] drop [列名];
如圖:
補充一個小知識:進入MySQL內部的命令行之后,是不能直接執行系統命令的,如果要執行可在前面加上system,比如system ls;
3.備份和恢復
mysqldump -P [端口號] -u [用戶] -p [密碼] 數據庫 表名,表名,... > [文件].sql#注意:mysql內執行要在mysqldump前加system。
首先向此表中插入一些數據之后,然后進行備份。
如圖:
接著將此表刪除之后,進行恢復。
source [指定目錄下的.sql文件];
如圖:
說明:恢復數據的過程其實就是將創建表和插入數據的sql語句記錄下來,然后再執行一遍,這里Query OK的行有點冗余,為了避免截出來圖片過長,我默默P掉了一部分,嘿嘿不用感謝我。
最后從表中查看數據驗證結果。
對比之后結果無誤,說明表恢復完畢。
尾序
今天學習了數據定義語言(DDL)中與表結構相關的操作,主要涉及創建,查看,修改,備份和恢復,當然還是一樣內容并不難,關鍵就在于一個熟練度,敲就完事了。我是舜華,期待與你的下次相遇!