[TOC]
## 創建數據表
#### 1、基本語法:
~~~
CREATE TABLE IF NOT EXISTS 數據表名稱 (
字段名稱1 [AS 別名] 字段類型 [約束條件] [DEFAULT 默認值] [COMMENT 字段注釋],
字段名稱2 [AS 別名] 字段類型 [約束條件] [DEFAULT 默認值] [COMMENT 字段注釋],
字段名稱3 [AS 別名] 字段類型 [約束條件] [DEFAULT 默認值] [COMMENT 字段注釋],
......
)ENGINE = 表存儲引擎 DEFAULT CHARSET = 默認編碼集 AUTO_INCREMENT = 自增主鍵起始值;
~~~
#### 2、語法解釋:
> * 字段名稱:不與MySQL關鍵字重名的任何有效標識符即可;
>* `IF NOT EXISTS`:意思是“如果不存在”再創建數據表,防止重復建表引起錯誤;
>* `AS 別名`:表中字段名均為英文單詞或縮寫,創建一個有意義的別名,使數據表查詢結果更加直觀、人性化;
>* 字段類型:非常重要,本文后面有詳細介紹;
>* 約束條件:主要是`NULL`(允許為空),`NOT NULL`(禁止為空)等,具體還要與字段類型相匹配;
>* `DEFAULT 默認值`:如某字段設置了默認值,則新增時未賦值則取默認值;
>* `COMMENT 字段注釋`:非必須,但可以使字段信息看上去再完整、直觀;
>* `ENGINE = 表存儲引擎`:
>>* MyISAM:讀取快速、成熟穩定、支持全文檢索、最常用,但不支持事務處理;
>>* InnoDB:具備提交、回滾的事務處理,支持外鍵,戰用空間大,不支持全文檢索;
>* `DEFAULT CHARSET 默認編碼集`: 通常與數據庫采用的編碼集相同(utf8)即可;
>* `AUTO_INCREMENT = 自增主鍵起始值`:如果設置,將從該值開始自增,如設置為1001,則第一條記錄是1001,第二條是1002。如果不設置,主鍵將默認從1開始自增;
* * * * *
### 3、字段類型:
#### 字段類型也叫列類型,主要有:數值、字符串、日期/時間三大類。
1. 數值型:有無符號和有符號之分,直接書寫,不要加引號,<span style="color:ForestGreen">長度僅影響顯示,不影響精度。</span>
1. 整型:又分為五類
1. INT : 標準整型,4字節,取值范圍大約正負21億,足以應付正常開發需要;
2. SMALLINT:小整數,2字節,取值范圍大約正負3.2萬之間,無符號翻倍。
3. TINYINT:極小整數,1字節,取值-128~127,無符號:0~255。
4. 其它:MEDIUMINT(3字節),BIGINT(8字節),不太常用。
2. 浮點型:
1. FLOAT:最常用,用4字節或8字節表示,具體依平臺而定;
2. DOUBLE:雙精度8字節;
3. DECIMAL:以字符串形式存儲的浮點數,大小自定義,用于會計領域等。
2. 字符串類型:
1. CHAR(長度): 固定寬度存儲字符串,忽略原始字符串長度;
2. VARCHAR(長度):可變長度字符串,根據原始字符串長度存儲;
3. TEXT:小型文本,不能設默認值和長度;
4. LONGTEXT:超大文本,同樣不可設默認值和長度;
5. ENUM(枚舉):在括號中集合數據中,只可以單選,無默認值;
6. SET(集合):集合最大64個成員,可以多選,無默認值。
3. 日期/時間類型(不要設置長度):
1. DATE:3字節,格式 YYYY-MM-DD,如 2016-10-20;
2. TIME:3字節,格式 hh:mm:ss,如 12:25:35;
3. DATETIME:8字節,格式 YYYY-MM-DD hh:mm:ss,如 2016-10-20 12:25:35;
4. TIMESTAMP:3字節時間戳,格式YYYYMMDDhhmmss共14位,可設置顯示長度進行截取操作,必須是偶數長度,常見6位,8位,12位;
5. YEAR:單字節,格式 YYYY,顯示年份,如2016。
* * * * *
### 4、約束條件:
> 主要有UNSIGNED、ZEROFILL、AUTO_INCREMENT、NULL / NOT NULL、DEFAULT等。
|序號| 約束條件 | 字段類型 | 說明 |
|---| --- | --- | --- |
|1 | UNSIGNED | INT , FLOATT等數值型 | 全是正數,范圍擴大一倍 |
| 2 | ZEROFILL | INT , FLOAT 等數值型 | 寬度大于實際長度時補足前導零 |
|3 | AUTO_INCREMENT | INT |無符號、默認從1開始自增,接受NULL或空值 |
| 4 | NULL / NOT NULL |不限制 | 為空或不為空 |
| 5 | DEFAULT | 非TEXT類型或主鍵 | 添加新記錄時沒賦值,則取默認值 |
* * * * *
### 5、實例
##### 任務:創建員工信息表staff
staff數據表結構如下:
| 序號 | 字段名 | 類型 | 寬度 | 約束 | 默認值|備注 |
| --- | --- | --- | --- | --- | --- |
| 1 | id | 整型 | 4位 | 無符號、不為空、自增、主鍵|無 | 編號 |
| 2 | name | 變長字符串 | 30位 | 不為空 | 無 |姓名 |
| 3 | sex | 整型 | 1位 | 不為空 | 1 |性別1男0女|
| 4 | salary |浮點型 | 共10位小數2位 |無符號、不為空 |2000 |工資|
| 5 | dept |變長字符串 | 20位 |不為空 | 開發部 |部門|
| 6 | hiredate |日期 | 默認 | 不為空 | 0000-00-00 |入職日期|
要求數據表存儲引擎為MyISAM,默認編碼:utf8,自增主鍵起始:1001。
##### 創建數據表SQL語句:
~~~
CREATE TABLE IF NOT EXISTS staff (
id INT(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '編號',
name VARCHAR(30) NOT NULL COMMENT '姓名',
sex TINYINT(2) unsigned NOT NULL DEFAULT 1 COMMENT '性別1男0女',
salary FLOAT(10,2) NOT NULL DEFAULT 2000.00 COMMENT '工資',
dept VARCHAR(20) NOT NULL DEFAULT '開發部' COMMENT '部門' ,
hiredate DATE NOT NULL DEFAULT '0000-00-00' COMMENT '入職日期',
PRIMARY KEY (id)
)ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1001;
~~~
##### 運行結果:

##### 查看表結構:
* 語法:`DESC 表名`

## 總結:
>[success] 數據表,是我們ThinkPHP開發中,數據庫操作的重要載體。而創建數據表,則是最重要的一環。一個結構良好、健壯的表結構是我們所有模型操作的基礎。
#### 請同學們,對于熟練創建數據表技能,給予足夠重視!
- 前言[隨時更新]
- ThinkPHP 5數據庫重構
- 開發環境
- 1.ThinkPHP5開發環境(Mac版)
- 2.ThinkPHP5開發環境(Win版)
- MySQL快速復習
- 1.數據庫操作
- 2.數據表操作
- 1.創建數據表 (重點)
- 2.添加數據表記錄
- 3.查詢數據表(重點)
- 4.更新數據表
- 5.編輯數據表結構(重點)
- 6_復制數據表
- 7.刪除數據和表
- 連接數據庫
- 1.數據庫配置文件database.php
- 2.Db類靜態方法connect()
- 3.模塊中的配置文件config.php
- MySQL原生查詢
- 1.讀操作query
- 2.寫操作execute
- 選擇數據表
- 1.table與setTable方法
- 2.name方法
- 3.db助手函數
- 4.alias方法
- 結果集查詢
- 1.find方法
- 2.select方法
- 3.fetchSql方法
- 4.value方法
- 5.column方法
- 6.field方法
- 新增數據
- 1.insert_單條添加
- 2.insertAll_批量添加
- 3_db_助手函數添加
- 更新數據
- 1.update方法
- 2.setField更新字段
- 3_自增自減與延時更新
- 刪除數據
- 1.delete方法
- 查詢方法
- 1.getTableInfo方法
- 2.where方法
- 3.whereOr方法
- 4.混合查詢(閉包實現)
- 表達式查詢
- 1.表達式查詢(重點)
- 2.exp通用查詢
- 分組查詢
- 1.group方法
- 2.having方法
- 排序分頁查詢
- 1.order方法
- 2.limit方法
- 3.page方法
- 聚合查詢
- 時間查詢
- 1.where方法
- 2.whereTime方法
- 高級查詢
- 1.快捷查詢
- 2.區間查詢
- 3.批量查詢
- 4.Query對象查詢
- 5.混合查詢
- 視圖查詢
- view方法
- 子查詢
- 1.select方法
- 2.fetchSql方法
- 3.buildSql方法
- 4.閉包子查詢
- 總結/參考
- 1.方法參數類型總結
- 2.查詢/子查詢/連接查詢