文章目錄
- 前言
- 一、創建表
- 創建表時指定屬性
- 二、查看表
- 查看表結構
- 查看建表消息
- 三、修改表
- 修改列屬性
- 修改列名
- 修改表名
- 四、刪除表
- 總結
前言
??Hello! 那我們乘勝追擊,開始 表的操作!
一、創建表
??首先創建一個 數據庫 testForTable
mysql> create database if not exists testForTable;
??當前創建的 數據庫 testForTable 字符集和校驗集分別為 utf8mb4 和 utf8mb4_unicode_ci,這是由配置文件中的默認編碼集決定的
??接下來創建一張表,具體語法為
CREATE TABLE [if not exists] tablename
(field1 datatype,field2 datatype,field3 datatype
) [character set 字符集] [collate 校驗規則] [engine 存儲引擎];
??其中 字符集、校驗規則、存儲引擎 可以不用指定,默認使用當前數據庫的默認屬性
??創建一張 person 表,包含 姓名、性別、年齡 三個字段
??注意: 創建表之前需要先使用數據庫
mysql> create table if not exists person
(name varchar(16) comment '姓名',sex char(2) comment '性別,只能為男/女',age int unsigned comment '年齡,不能為負數'
);
??這樣就得到了一張 person 表,當前表的字符集為 utf8mb4,校驗集為 utf8mb4_unicode_ci,存儲引擎為 InnoDB,這些都是數據庫的 默認屬性,只要我們在創建表時不指定屬性,表就會繼承數據庫的默認屬性
??通過 InnoDB 引擎創建的表會生成 一個文件(跟你的MySQL版本有關)
注意:
- comment ‘內容’ 表示注釋,通常用來注明該字段的含義及用途
- 在 MySQL 中定義無符號類型的數據,需要把 unsigned 放在類型之后修飾
創建表時指定屬性
??除了使用數據庫的 默認屬性,還可以在創建時指定屬性,比如再創建一張 goods 表,表示商品信息,包含字段有 商品名、價格、數量、廠商,并且在創建表時,指定字符集為 gbk,校驗集為 gdk_chinese_ci,存儲引用選擇 MyISAM
mysql> create table if not exists goods
(name varchar(32) comment '商品名稱',price double(10, 2) unsigned comment '商品價格,最多支持小數點前 8 位數,小數點后 2 位數',num int unsigned comment '商品數量',factory varchar(64) comment '廠商名稱'
) character set 'gbk' collate 'gbk_chinese_ci' engine 'MyISAM';
??此時通過 MyISAM引擎 生成的表會創建三個文件
二、查看表
??身處某個數據庫中,可以通過 show tables 查看當前數據庫中有哪些表
mysql> show tables;
??比如說之前創建的兩張表
查看表結構
??知道有哪些表后,還需要進一步了解表的 結構 信息,比如有哪些字段,才能知道如何使用這張表,查看表的詳細信息語法為
mysql> desc tablename
??分別查看剛才創建的兩張表的 結構 信息
mysql> desc person;
mysql> desc goods;
??可以看到查詢結果為一張行列構建的表,第一行表示各種屬性信息,屬性支持修改
- Field 表示 列名
- Type 表示 類型
- Null 表示 是否可為空
- Key 表示 是否存在 主鍵/外鍵/唯一鍵 約束
- Default 表示 是否有默認值
- Extra 表示 額外信息
查看建表消息
??如果想查看關于表更詳細的信息,可以通過指令查看建表時的語句內容,語法為
SHOW CREATE TABLE tablename
SHOW CREATE TABLE tablename \G
??MySQL 會記錄下用戶的所有操作痕跡,這也是備份后,恢復數據庫的關鍵,把所有指令再執行一遍,就能得到一模一樣的數據庫了
三、修改表
修改列屬性
??首先是新增字段,語法為
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...);
??column 表示 列名,datatype 表示 類型,[DEFAULT expr] 表示該列的各種 屬性,比如約束、默認值、是否為空等,支持同時新增多個字段
??給 person 表新增 出生日期、愛好 兩個字段
??注意: 如果新增多個字段時,需要使用 ( ) 將新增的一批字段括起來
mysql> alter table person add (birthday date comment '生日', hobby varchar(32) comment '愛好');
??新增的字段默認是緊跟最后一個字段的
??如果想新增至指定字段之后,可以在語句后面加上 after column,比如在 性別 sex 之后新增一個 籍貫 字段
??注意: 只支持新增單個字段時,指定位置,也就是說 ( ) 與 after column 是沖突的,不能同時使用
mysql> alter table person add hometown varchar(16) comment '籍貫' after sex;
??除了可以新增字段,還可以修改字段,語法為
ALTER TABLE tablename MODIFY column datatype [DEFAULT expr], [MODIFY ...];
注意:
- 需要確保修改的字段存在,并且要保證修改后的字段類型與表中已經存在的數據類型相匹配
- 修改多個字段時,可以疊加多條 MODIFY column datatype [DEFAULT expr] 語句,通過 , 分隔
- 修改字段后,原字段的所有信息都會被覆蓋,包括注釋
??修改 name 的類型為 varchar(32),修改 age 的類型為 int,因為此時是空表,所以可以隨便修改
mysql> alter table person modify name varchar(32), modify age int;
??可以看到,之前的注釋沒了,并且字段的類型也修改了
??最后就是刪除字段,語法為
ALTER TABLE tablename DROP (column), [DROP ...];
??注意: 刪除字段時,同樣需要確保字段存在,字段被刪除后,表中對應的數據也會被刪除
??先隨便新增幾個無用字段,再刪除
mysql> alter table person add (a int, b int, c double);
mysql> alter table person drop a, drop b, drop c;
??剛剛新增的無用字段立馬就被刪除了
??在 MySQL 中,刪除 一直都是一個 高危 操作,畢竟數據丟了不容易找回,比如這里的刪除字段,如果表中有數據,那么表中數據關于該字段的信息會被全部刪除,所以刪除字段要 慎用
??網上說的被裁什么刪庫跑路之類的看看笑話就行~
修改列名
??列名是支持修改的,語法為
ALTER TABLE tablename CHANGE oldcolumn newcolumn datatype [DEFAULT expr];
??注意: 修改需要確保字段存在,修改后,上層應用會受影響
??比如把 goods 表中的 num 改為 nums
mysql> alter table goods change num nums int unsigned;
??可以看到修改之后,注釋也沒了,這個操作也要 慎用,因為上層查詢時,可能會查詢失敗,需要上層配合更新信息
修改表名
??表名支持修改,語法為
ALTER TABLE oldname RENAME [TO] newname;
??其中 TO 可以省略,修改成功后,Linux 中對應的文件名也會被修改
??注意: 如同修改字段名一樣,修改表名也是一個危險操作,同樣會影響上層使用
??修改 person 表名為 students
mysql> alter table person rename to students;
??可以看到,表對應的文件名,也被修改了
四、刪除表
??還是要提醒下,這很危險,非必要情況下請不要這么做
??刪除表的語法為
DROP TABLE tablename;
??注意: 刪除表很危險,刪除之后,表中所有的數據就都沒了,不要輕易刪除!
??刪除 goods 表
mysql> drop table goods;
??當然,刪除成功后,Linux 中對應的文件也被刪除了,這也是很顯然的
總結
??本篇有很多刪除操作,數據庫的恢復是相當麻煩的,甚至還有徹底無法恢復的可能,所以我們再進行修改乃至刪除的時候務必要慎之又慎