# 認識 `MySQL`
---
```php
# 創建user表
CREATE TABLE `user` (
`uid` int(11) unsigned NOT NULL AUTO\_INCREMENT COMMENT '用戶ID',
`phone` varchar(11) NOT NULL COMMENT '手機號',
`name` varchar(50) NOT NULL COMMENT '昵稱',
`sex` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性別 1男 2女 0未知',
`age` int(3) unsigned NOT NULL DEFAULT '1' COMMENT '年齡',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '狀態 1開啟 0關閉',
PRIMARY KEY (`uid`)
) ENGINE=MyISAM AUTO\_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='用戶表';
```
## 一、數據類型
### 1、`MySQL` 數值型
**類型**|**大小**|**范圍(有符號)**|**范圍(無符號)**|**用途**
---|---|---|---|---
TINYINT (tinyint)|1字節|(-128,127)|(0,255)|小整數值
SMALLINT (smallint)|2字節|(-32 768,32 767)|(0,65 535)|大整數值
MEDIUMINT (mediumint)|3字節|(-8388608,8388607)|(0,16777215)|大整數值
INT或INTEGER (int)|4字節|(-2147483648,2147483647)|(0,4294967295)|大整數值
BIGINT (bigint)|8字節|(-9223372036854775808,9223372036854775807)|(0,18446744073709551615)|極大整數值
FLOAT (float)|4字節|(-3.402823466E+38,-1.175494351E-38),0,(1.175494351E-38,3.402 823466351E+38)|0,(1.175494351E-38,3.402823466E+38)|單精度 浮點數值
DOUBLE (double)|8字節|(-1.7976931348623157E+308,-2.2250738585072014E-308),0,(2.2250738585072014E-308,1.7976931348623157E+308)|0,(2.2250738585072014E-308,1.7976931348623157E+308)|雙精度 浮點數值
DECIMAL (decimal)|對DECIMAL(M,D),如果M>D,為M+2否則為D+2|依賴于M和D的值|依賴于M和D的值|小數值
### 2、`MySQL` 日期/時間型
**類型**|**大小**|**范圍**|**格式**|**用途**
---|---|---|---|---
DATE (data)|3字節|1000-01-01/9999-12-31|YYYY-MM-DD|日期值
TIME (time)|3字節|-838:59:59'/'838:59:59|HH:MM:SS|時間值或持續時間
YEAR (year)|1字節|1901/2155|YYYY|年份值
DATETIME (datetime)|8字節|1000-01-01 00:00:00/9999-12-31 23:59:59|YYYY-MM-DD HH:MM:SS|混合日期和時間值
TIMESTAMP (timestamp)|3字節|1970-01-01 00:00:00/2038-1-19 11:14:07|YYYYMMDD HHMMSS|混合日期和時間值,時間戳
### 3、`MySQL` 字符串型
**類型**|**大小**|**用途**
---|---|---
CHAR (char)|0-255字節|定長字符串
VARCHAR (varchar)|0-65535字節|變長字符串
TINYBLOB (tinyblob)|0-255字節|不超過 255 個字符的二進制字符串
TINYTEXT (tinytext)|0-255字節|短文本字符串
BLOB (blob)|0-65535字節|二進制形式的長文本數據
TEXT (text)|0-65535字節|長文本數據
MEDIUMBLOB (mediumblob)|0-16777215字節|二進制形式的中等長度文本數據
MEDIUMTEXT (mediumtext)|0-16777215字節|中等長度文本數據
LONGBLOB (longblob)|0-4294967295字節|二進制形式的極大文本數據
LONGTEXT (longtext)|0-4294967295字節|極大文本數據
## 二、增刪查改
### 1、插入數據
* `MySQL` 表中使用 `INSERT INTO` 語句來插入數據
```php
// 指定字段名
INSERT INTO `user` (`uid`,`phone`,`name`,`sex`,`age`,`status`)
VALUES
(1,'18000001111','歐陽克',1,18,1);
// 未指定字段名
INSERT INTO `user`
VALUES
(2,'18000002222','黃蓉',1,16,1);
```
### 2、查詢數據
* `MySQL` 數據庫使用 `SELECT` 語句來查詢數據
```php
// 無條件查詢
SELECT * FROM `user`;
// 有條件查詢
SELECT * FROM `user` WHERE `uid`=1;
// 指定字段返回, * 查詢全部字段
SELECT `phone`,`name` FROM `user` WHERE `uid`=1;
```
### 3、修改數據
* `MySQL` 數據庫使用 `UPDATE` 命令來修改數據
```php
// 無條件修改,會修改全表,不要這樣操作
UPDATE `user` SET
`name`='郭靖',`age`=20,`phone`='18000003333';
// 有條件修改
UPDATE `user` SET
`name`='郭靖',`age`='20',`phone`='18000003333' WHERE `uid`=1;
```
### 4、刪除數據
* `MySQL` 數據庫使用 `DELETE` 命令來刪除數據
```php
// 無條件刪除,會刪除全表,不要這樣操作
DELETE FROM `user`;
// 有條件刪除
DELETE FROM `user` WHERE `uid`=1;
```
## 三、`MySQL` 子句
> 方便下面測試,我們先增加一些假數據
```php
INSERT INTO `user` VALUES ('1','13311111111','歐陽克','1','18','1');
INSERT INTO `user` VALUES ('2','13322222222','黃蓉','2','16','1');
INSERT INTO `user` VALUES ('3','13333333333','郭靖','1','20','1');
INSERT INTO `user` VALUES ('4','13344444444','楊康','1','22','1');
INSERT INTO `user` VALUES ('6','13355555555','穆念慈','2','19','1');
INSERT INTO `user` VALUES ('7','13366666666','黃藥師','1','50','1');
INSERT INTO `user` VALUES ('8','13377777777','歐陽鋒','1','51','1');
INSERT INTO `user` VALUES ('9','13388888888','段智興','1','52','1');
INSERT INTO `user` VALUES ('10','13399999999','洪七公','1','56','1');
INSERT INTO `user` VALUES ('11','13300000000','王重陽','1','60','1');
INSERT INTO `user` VALUES ('12','13411111111','周伯通','1','57','1');
INSERT INTO `user` VALUES ('13','13422222222','郭嘯天','1','43','1');
INSERT INTO `user` VALUES ('14','13433333333','李萍','2','37','1');
INSERT INTO `user` VALUES ('15','13455555555','楊鐵心','1','42','1');
INSERT INTO `user` VALUES ('16','13466666666','包惜弱','2','36','1');
INSERT INTO `user` VALUES ('17','13477777777','完顏洪烈','1','55','1');
INSERT INTO `user` VALUES ('18','13488888888','柯鎮惡','1','62','1');
INSERT INTO `user` VALUES ('19','13499999999','朱聰','1','58','1');
INSERT INTO `user` VALUES ('20','13400000000','韓寶駒','1','54','1');
INSERT INTO `user` VALUES ('21','13511111111','南希仁','1','52','1');
```
### 1、`WHERE` 條件子句
* (查詢、修改、刪除)可以使用 `WHERE` 命令來執行條件
* `WHERE` 子句類似于程序語言中的 if 條件,根據 `MySQL` 表中的字段值來讀取指定的數據
```php
// 字段uid等于1的用戶,會被查詢出來
SELECT * FROM `user` WHERE `uid` = 1;
```
> 除了 = 號,還有其它操作符
**操作符**|**描述**|**實例**
---|---|---
`=`|等號,檢測兩個值是否相等,如果相等返回true|(A = B) 返回false
`<>` `!=`|不等于,檢測兩個值是否相等,如果不相等返回true|(A != B) 返回 true
`>`|大于號,檢測左邊的值是否大于右邊的值,如果左邊的值大于右邊的值返回true|(A > B) 返回false
`<`|小于號,檢測左邊的值是否小于右邊的值,如果左邊的值小于右邊的值返回true|(A < B) 返回 true
`>=`|大于等于號,檢測左邊的值是否大于或等于右邊的值,如果左邊的值大于或等于右邊的值返回true|(A >= B) 返回false
`<=`|小于等于號,檢測左邊的值是否小于于或等于右邊的值,如果左邊的值小于或等于右邊的值返回true|(A <= B) 返回 true
```php
// 不等于
SELECT * FROM `user` WHERE `uid` <> 10;
// 大于
SELECT * FROM `user` WHERE `uid` > 10;
// 大于等于號
SELECT * FROM `user` WHERE `uid` >= 10;
// 小于
SELECT * FROM `user` WHERE `age` < 50;
// 小于等于
SELECT * FROM `user` WHERE `age` <= 50;
```
### 2、`ORDER BY` 排序子句
* (查詢)可以使用 `ORDER BY` 命令進行數據結果排序
```php
// 默認正序
SELECT * from `user` ORDER BY `age` ASC;
// 倒序查詢
SELECT * from `user` ORDER BY `age` DESC;
```
### 3、`LIMIT` 分頁子句
* (查詢)可以使用 `LIMIT` 命令進行分頁顯示
```php
// 查詢前5條數據
SELECT * FROM `user` LIMIT 5;
// 查詢從第1條開始,往后查詢出10條
SELECT * FROM `user` LIMIT 0,10;
// 查詢從第6條開始,往后查詢出10條
SELECT * FROM `user` LIMIT 5,10;
```
> 備:子句可以在一起使用
```php
SELECT `uid`,`phone`,`name` FROM `user` WHERE `uid` <> 10 ORDER BY `age` DESC LIMIT 5,10;
```
### 4、`LIKE` 條件子句
* (查詢、修改、刪除)可以使用 `LIKE` 命令進行模糊查詢,要配合 `WHRER`
* `%` 匹配任意多個字符
* `\_` 匹配任意一個字符
```php
// 匹配右邊任意多個字符
SELECT * FROM `user` WHERE `name` LIKE '歐%';
// 匹配左邊任意多個字符
SELECT * FROM `user` WHERE `phone` LIKE '%22';
// 匹配兩邊任意多個字符
SELECT * FROM `user` WHERE `phone` LIKE '%1%';
// 匹配右邊任意一個字符
SELECT * FROM `user` WHERE `name` LIKE '歐_';
// 匹配左邊任意一個字符
SELECT * FROM `user` WHERE `phone` LIKE '_22';
// 匹配兩邊任意一個字符
SELECT * FROM `user` WHERE `phone` LIKE '_1_';
```
### 5、`IS NULL` 和 `IS NOT NULL` 條件子句
* (查詢、修改、刪除)可以使用 `IS NULL` 和 `IS NOT NULL` 命令進行查詢,要配合 `WHRER`
* `IS NULL` 當列的值是 `NULL` ,此運算符返回 true
* `IS NOT NULL` 當列的值不為 `NULL` ,運算符返回 true
```php
// 查詢name為空的數據
SELECT * FROM `user` WHERE `name` IS NULL;
// 查詢name不為空的數據
SELECT * FROM `user` WHERE `name` IS NOT NULL;
```
### 6、`IN` 和 `NOT IN` 條件子句
* (查詢、修改、刪除)可以使用 `IN` 和 `NOT IN` 命令進行查詢,要配合 `WHRER`
```php
// 查詢IN里面的數據
SELECT * FROM `user` WHERE `name` IN ('歐陽克','黃蓉');
// 查詢去除IN里面的數據
SELECT * FROM `user` WHERE `name` NOT IN ('歐陽克','黃蓉');
```
## 四、組合條件
### 1、
- 序言
- PHP基礎
- 認識PHP
- 環境安裝
- PHP語法
- 流程控制
- PHP數組
- PHP函數
- PHP類與對象
- PHP命名空間
- PHP7新特性
- PHP方法庫
- PHP交互
- 前后端交互
- 項目常規開發流程
- MySQL數據庫
- 會話控制
- Ajax分頁技術
- 細說函數
- 類與對象
- 對象進階
- 類與對象進階
- OOP面向對象
- 設計模式
- 路由與模板引擎
- 異常類
- PHP爬蟲
- PHP抓取函數
- PHP匹配函數
- 正則表達式
- PHP字符串函數
- 抓取實戰
- PHP接口
- 了解接口
- PHP插件
- PHPSpreadsheet
- ThinkPHP6
- 安裝
- 架構
- 數據庫
- 數據庫操作
- 視圖
- 模版
- 模型
- 雜項
- 命令行
- 交互
- 微信小程序
- 介紹
- 配置
- 組件
- 交互
- API
- 其他知識
- 百度小程序
- 介紹
- 配置
- 組件
- 交互
- API
- 其他知識
- Linux
- 服務器上線流程
- 安裝svn
- MySQL
- 認識MySQL
- MySQL函數
- 雜項
- composer依賴管理工具