diff --git a/blog/php-mysql/index.md b/blog/php-mysql/index.md index ae7d2e2ef4407d8e2507c510ca05405a7162a223..150aa772bba5002f42d88bb0daf198a12e73cb20 100644 --- a/blog/php-mysql/index.md +++ b/blog/php-mysql/index.md @@ -31,3 +31,9 @@ [表关系](blog/php-mysql/sql-relation.md) [高级数据操作-新增数据](blog/php-mysql/sql-senior-add.md) + +[高级数据操作-更新数据](blog/php-mysql/sql-senior-update.md) + +[高级数据操作-删除数据](blog/php-mysql/sql-senior-delete.md) + +[高级数据操作-查询数据](blog/php-mysql/sql-senior-select.md) diff --git a/blog/php-mysql/sql-senior-delete.md b/blog/php-mysql/sql-senior-delete.md new file mode 100644 index 0000000000000000000000000000000000000000..a9e182a2bd727111bc65096b62810bda2edab77d --- /dev/null +++ b/blog/php-mysql/sql-senior-delete.md @@ -0,0 +1,23 @@ +# 高级数据操作-删除数据 + +1、删除数据应该使用where进行条件控制 + +```sql +delete from 表名 where 条件; +``` + +2、删除数据可以使用limit来限制删除数量 + +```sql +delete from 表名 where 条件 limit 数量; +``` + +delete删除数据,无法重置auto_increment + +要重置auto_increment,可以使用truncate + +```sql +truncate 表名; + +-- 等价于: drop + create +``` diff --git a/blog/php-mysql/sql-senior-select.md b/blog/php-mysql/sql-senior-select.md new file mode 100644 index 0000000000000000000000000000000000000000..de560275cdf177aab95fe42de3c7d71ddee0df00 --- /dev/null +++ b/blog/php-mysql/sql-senior-select.md @@ -0,0 +1,162 @@ +# 高级数据操作-查询数据 + +完整的查询指令 + +```sql +select 选项 字段列表 +from 数据源 +where 条件 +group by 分组 +having 条件 +order by 排序 +limit 限制; +``` + +## 1、select选项 + +处理查询到的结果 + +- all 默认值,表示保存所有记录 +- distinct 去重,只保留一条(所有字段都相同认为重复) + +```sql +create table my_select( + name varchar(10) +); + +insert into my_select (name) values ('A'), ('A'), ('A'), ('B'); + +mysql> select all * from my_select; ++------+ +| name | ++------+ +| A | +| A | +| A | +| B | ++------+ + +mysql> select distinct * from my_select; ++------+ +| name | ++------+ +| A | +| B | ++------+ +``` + +## 2、字段列表 + +多张表获取数据,可能存在不同表中有同名字段,需要使用别名alias + +```sql +字段名 [as] 字段别名; +``` + +```sql +select distinct name as name1, name as name2 from my_select; ++-------+-------+ +| name1 | name2 | ++-------+-------+ +| A | A | +| B | B | ++-------+-------+ +``` + +## 3、from数据源 + +为前面的查询提供数据 + +数据源只要是一个符合二维表结构的数据即可 + +### 3.1、单表数据 + +```sql +from 表名; + +select * from my_select; +``` + +### 3.2、多表数据 + +基本语法 + +```sql +from 表名1, 表名2...; +``` + +```sql +mysql> select * from my_select; ++------+ +| name | ++------+ +| A | +| B | ++------+ +2 rows in set (0.00 sec) + +mysql> select * from my_student; ++----+--------+ +| id | name | ++----+--------+ +| 1 | 刘备 | +| 2 | 李四 | +| 3 | 王五 | ++----+--------+ +3 rows in set (0.00 sec) + +mysql> select * from my_select, my_student; ++------+----+--------+ +| name | id | name | ++------+----+--------+ +| A | 1 | 刘备 | +| B | 1 | 刘备 | +| A | 2 | 李四 | +| B | 2 | 李四 | +| A | 3 | 王五 | +| B | 3 | 王五 | ++------+----+--------+ +6 rows in set (0.00 sec) +``` + +结果是两张表记录数据相乘,字段数拼接 + +本质:从第一张表取出一条记录,去拼凑第二张表所有记录,保留所有结果 + +笛卡尔积,会给数据库造成压力,尽量避免 + + +### 3.3、动态数据 + +from后面不是一个实体表,而是一个从表中查询出来得到的二维结果表(子查询) + +基本语法 + +```sql +from (select 字段列表 from 表名) as 别名 +``` + +```sql +mysql> select * from (select * from my_student) as t1; ++----+--------+ +| id | name | ++----+--------+ +| 1 | 刘备 | +| 2 | 李四 | +| 3 | 王五 | ++----+--------+ +``` + + +group + +having + +order + +limit + +聚合函数 + + +https://www.bilibili.com/video/BV1Vx411g7uJ?p=36&spm_id_from=pageDriver diff --git a/blog/php-mysql/sql-senior-update.md b/blog/php-mysql/sql-senior-update.md new file mode 100644 index 0000000000000000000000000000000000000000..fd2dee306da350a1c96dcd310d2821d927ea2bf1 --- /dev/null +++ b/blog/php-mysql/sql-senior-update.md @@ -0,0 +1,42 @@ +# 高级数据操作-更新数据 + +1、通常一定是跟随条件更新 + +```sql +update 表名 set 字段名 = 新值 where 判断条件; +``` + +2、如果没有条件,是全表更新。可以使用limit来显示控制更新的数量 + +```sql +update 表名 set 字段名 = 新值 [ where 判断条件 ] limit 数量; + +create table my_update( + id int primary key auto_increment, + name varchar(10) +); + +insert into my_update (name) values ('A'), ('A'), ('A'), ('A'); + +mysql> select * from my_update; ++----+------+ +| id | name | ++----+------+ +| 1 | A | +| 2 | A | +| 3 | A | +| 4 | A | ++----+------+ + +update my_update set name = 'B' where name = 'A' limit 2; + +mysql> select * from my_update; ++----+------+ +| id | name | ++----+------+ +| 1 | B | +| 2 | B | +| 3 | A | +| 4 | A | ++----+------+ +``` \ No newline at end of file