# 认识 `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依赖管理工具