这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战
MySQL表的增删改查(初阶)
增删改查即CRUD
create Delete Update Retrieve
新增
| 新增 | creat |
|---|
| 全列插入 | insert [into] 表名 values(值,值....) |
| 多行插入+全列插入 | insert [into] 表名 values(值,值..),(值,值...),(值,值...)... |
| 指定列插入 | insert [into] 表名 (列名,列名.....) values(值,值...) |
| **分多次插入,涉及到多次网络传输 | |
| 一次插入多条记录,多个记录仍在一条网络传输上 ,效率高** | |
  | |
 | |
查询
查询操作得到的表是临时表,查询操作不会影响到磁盘上的数据
| 查询 | Retrieve |
|---|
| 全列查询 | select * from 表名 |
| 指定列查询 | select 列名,列名.... from 表名 |


查询字段为表达式
| 查询字段为表达式 | select 表达式 from 表名 { 注意null加一个数是null} |
|---|
 | |
别名
| 别名 | select 表达式 [as] 别名 from 表名 |
|---|

去重
| 去重 distinct | select distinct 列名,列名.... from 表名 |
|---|
| 去掉指定列中数据相同的行(保留一个),去重操作涉及"比较操作",比较double,float可能存在误差,但是比较decimal可以精确比较 | |

排序(order by)
select...from table_name order by column asc/desc
asc 升序 ascend
desc 降序 descend
- 如果查询语句没有 order by ,认为查询结果是无序的
- null 数据排序,视为比任何值都小
- 如果order by后有多个列,先按照第一列排序,第一列相同再按照第二列排序,以此类推
- 可使用表达式或别名排序
- 如果不加ASC/DESC,默认是ASC

条件查询(where)
| 比较运算符 | |
|---|
| >,>=,<,<= | |
| = | 相等,但是null=null的结果是null(相当于是false) |
| <=> | 相等,null<=>null的结果是true |
| != | 不等于 |
| between a and b | 范围匹配,前闭后闭 ,a<=value<=b,返回true |
| in(a,a1,a2,a3....) | 如果是括号中的任意一个,返回true |
| is null | 是null |
| is not null | 不是null |
| like | |
| 逻辑运算符 | |
|---|
| and | 相当于&& |
| or | 相当于|| |
| not | 条件为true,返回结果为false |
- where条件可以使用表达式,但不能用别名
- .null参与比较,结果是null,也就是false
- and的优先级高于or,在使用时可以使用小括号()包裹优先执行的部分
- 查询过程 MySQL内部会遍历这个表的每一行记录,拿这个记录的值代入where条件,如果为true就保留这个记录,如果为false就舍弃这个记录
- 遍历操作是O(n),遍历数据需要到磁盘上读数据的值,如果MySQL中数据量很大,这就是一个很大的开销
- 比较条件的列不一定是前面需要查询的列
观察and和or的优先级
between and
in() 相当于or

修改(update)
update 表名 set 列名=值,列名=值... where 条件
update 表名 set 列名=值,列名=值... [order by ...] limit...
- where ,limit条件确定行,如果没有条件,相当于把每一行都改了
- 注意修改的数据不要越界

删除(delete)
delete from 表名 where 条件
delete from 表名 [order by...] limit...