# MySQL表的管理
[TOC]
## 導學
在之前的章節中,其實我們主要學習了如何去創建一張表,那在本節課程中,我們將要學習如何去管理一張表。
## 表結構相關操作
### 添加刪除表字段
語法:
~~~
添加字段
ALTER TABLE tb_name ADD 字段名稱 字段屬性 [完整性約束條件][FIRST(將某個字段加到起始位置)|AFTER 字段名稱]
刪除字段
ALTER TABLE tb_name DROP 字段名稱
~~~
示例:
~~~
添加
alter table user add user_name varchar(60) not null after id
刪除
alter table user drop email
~~~
### 動態添加刪除默認值
語法:
~~~
添加默認值:
ALTER TABLE tb_name ALTER 字段名稱 SET DEFAULT 默認值;
刪除默認值:
ALTER TABLE tb_name ALTER 字段名稱 DROP DEFAULT
~~~
示例:
~~~
-- 給email字段添加默認值 0-未填寫
alter table user
alter email SET DEFAULT '0-未填寫';
-- 刪除age字段的默認值
alter table user2
alter age drop default
~~~
### 動態修改字段的屬性和類型
語法:
~~~
修改字段類型,字段屬性
ALTER TABLE tb_name
MODIFY 字段名稱 字段類型 [字段屬性] [FIRST | AFTER 字段名稱]
修改字段名稱,字段類型,字段屬性
ALTER TABLE tb_name
CHANGE 原字段名稱 新字段名稱 字段類型 字段屬性 [FIRST | AFTER 字段名稱]
~~~
示例:
~~~
-- 修改字段類型,字段屬性
alter table user
modify username varchar20) not null unique
-- 修改字段名稱,字段類型,字段屬性
alter table user
change username user_name varchar(20) not null
~~~
### 動態添加和刪除主鍵
**自學完成**
~~~
添加主鍵
ALTER TABLE tb_name ADD PRIMARY KEY(字段名稱)
刪除主鍵
ALTER TABLE tb_name DROP PRIMARY KEY;
~~~
示例:
~~~
-- 添加主鍵
ALTER TABLE user ADD PRIMARY KEY(id);
-- 刪除主鍵
ALTER TABLE user DROP PRIMARY KEY;
~~~
注意:如果對主鍵設置自增約束后,是不能直接刪除主鍵的,需要先刪除自增約束。
### 動態添加和刪除唯一約束
語法:
~~~
添加唯一
ALTER TABLE tb_name ADD UNIQUE KEY|INDEX [index_name](字段名稱);
刪除唯一
ALTER TABLE tb_name DROP INDEX index_name;
~~~
注意:當我們想要刪除唯一約束的時候,需要借助唯一約束的名字,可以通過`show create table tb_name`語句查看表的詳細信息。當沒有給唯一字段的約束起名字時,系統默認將字段名設置為唯一字段索引名稱。
示例:
~~~
-- 添加唯一索引
ALTER TABLE user
ADD UNIQUE KEY(username);
-- 或
ALTER TABLE user
ADD UNIQUE INDEX uni_email(email); --uni_加字段名稱
-- 刪除時則:
ALTER TABLE user DROP UNIQUE INDEX uni_email;
~~~
### 修改表名稱
~~~
修改數據表名稱:
ALTER TABLE tb_name RENAME [TO|AS] new _tb_name
或
RENAME TABLE tb_name TO new_tb_name
~~~
示例:
~~~
ALTER TABLE user
RENAME TO user666;
~~~
## 存儲引擎
MySQL 5.5之后默認使用InnoDB存儲引擎。
### 什么是存儲引擎
“存儲引擎”從字面理解,“存儲”的意思的存儲數據。
“引擎”一詞來源于發動機,它是發動機中的核心部分。在軟件工程領域,相似的稱呼有“游戲引擎”、“搜索引擎”,它們都是相應程序或系統的核心組件。
所以從這里可以看出“存儲引擎”似乎也是數據庫的核心。存儲引擎是MySQL有別于其他數據庫管理系統的最大特色,比如它的兄弟Oracle中就沒有專門的存儲引擎的概念,我們知道關系型數據庫的數據是存在表里的,可以將表理解為由行和列組成的表格,類似于Excel的電子表格的形式,每個表格就是一個數據。
表是在存儲數據的同時,還要組織數據的存儲結構,而這些數據的組織結構就是由存儲引擎決定的。
但是,對于用戶和應用程序來說同一張表的數據,無論用什么引擎來存儲,用戶看到的數據都是一樣的。不同的引擎存取、引擎功能,占用的空間大小,讀取性能等可能有區別。
簡單來說,存儲引擎就是數據的存儲結構,由實際業務決定。
### 常用引擎
對于日常工作來說,常用的存儲引擎只有四種:默認的InnoDB、MyISAM和MEMORY。
* **MyISAM**:擁有較高的插入,查詢速度,但不支持事務,多用于數據倉庫這樣查詢多而事務少的情況,速度較快。
* **InnoDB**:5.5版本后Mysql的默認數據庫,事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定(可以提升多并發時的性能)。多用于web網站后臺等實時的中小型事務處理后臺。
* **MEMORY**:所有數據置于內存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數據量成正比的內存空間。并且其內容會在Mysql重新啟動時丟失
>[info]ACID指的是:原子性(Atomiocity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。**這也是MySQL數據庫的特性**