MySQL表的CRUD操作
表数据操作
添加数据(Create)
###全列添加
要给这张表的所有字段都添加内容
如果添加时不指定列,那么插入的值的顺序一定要和建表时的顺序保持一致。
insert into 表名 values(...,...,...,...);
多行全列插入
指定列添加
必须指定列,插入值的顺序必须和指定列的顺序保持一致!
insert into 表名(字段名,字段名)values(字段名对应内容,字段名对应内容)
查询数据(Retrieve)
全列查询
因为开发环境的数据一般不大,所以开发环境使用较多,生产环境谨慎使用
select * from 表名;
缺点:如果数据量大,就会消耗大量的带宽信息,并且传输速度很慢。并且查询范围太大。
可能影响索引的使用。
指定列查询
列名可随意修改,不影响查询结果。
select 列名[,列名] from 表名;
表达式查询
表达式查询操作不会修改表的原始数据。
select 列名,列操作 from 表名;
使用别名查询
使用别名查询操作不会修改表的原始数据。
select 列名 as 别名 from 表名;
去重(Distinct)
select distinct 列名 from 表名;
去重一列:
去重多列:
distinct去重多列时,可以使用多个字段联合去重,规则是所有的联合字段全部相同时才可以。
排序(Order by)
升序(asc)
升序进行排序时,asc可省略,默认排序方式为升序排列
select * from 表名 order by 列名 asc;
降序(desc)
select * from 表名 order by 列名 desc;
多列排序
select 列1,列2 from 表名 order by 列2,列3 desc /asc
只有列2相同时,才会使用列3排序
条件查询
比较运算符:
逻辑运算符:
模糊查询:like
where 字段名 like ‘刘%’; 可以匹配任意长度字符。
where 字段名 like ‘刘_’;只能匹配一个字符长度。
%和_可以用在任意位置
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';
-- 匹配到孙悟空、孙权
-- _ 匹配严格的⼀个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';
-- 匹配到孙权
where查询
select * from table_name where 、查询条件
where条件查询不能使用别名,可以在order by中使用
select * from 表名 where 条件查询
常见面试题: 为什么别名不能使用在where中,但可以使用在order by 中?
因为别名操作是在select阶段产生的,因此在select之前的阶段不能识别到别名。select之后的阶段可以。
MySQL的执行顺序:
from 阶段
where 阶段
group by 阶段 (分组查询)
having 阶段 (分组查询条件)
select 阶段
order by 阶段
limit 阶段 (分页查询)
逻辑运算符and的执行优先级是高于or的,因此如果在一个查询中既有and查询又有or查询,就需要给or查询添加括号,提升其优先级。
分页查询(limit)
查询某一个页面上的部分信息(截取部分行信息)
select 字段名 from 表名 [where ......][order by ......]limit n;
限制查询n条;
限制行数为50,如果超出范围,也不会报错。
select 字段名 from 表名 [where ......][order by ......]limit s,n;
查询n条信息,跳过前s条。
```sql
select 字段名 from 表名 [where ......][order by ......]limit n offset s;
查询n条信息,跳过前s条。
修改数据(Update)
update 表名 set 列名= ...... (列名= ......);
全部数据修改(单列)
部分数据修改(单列)
表达式修改
删除数据(Delete)
delete 删除(DML数据操纵语言)
delete from 表名 [where...... ][order by......][limit......];
drop 删除(DDL数据定义语言)
删除整张表,所有的行数据+表结构(不能添加where,order by,limit条件)
drop table 表名;
truncate删除(DDL数据定义语言)
truncate 表,(表名)
truncate不能加查询条件,用truncate 不会删除表结构,只会删除表中的所有数据。
drop ,delete,truncate的区别:
1.删除影响范围
drop(删除表结构+数据)>truncate (删除所有数据)>=delete (删除所有或部分数据)
2.查询条件:
delete可以添加where等查询条件,其他的删除指令是不可以的下。
3.命令类型:
drop属于DDL 删除后的数据不可以被恢复。
delete属于DML
执行原理:在InnoDB数据库引擎下,delete并不是真正的把数据删除掉了,给数据打上了一个删除标签,表示当前的数据已经被删除了。删除后的数据可以被恢复。
truncate属于DDL
执行原理:重新创建一个表,然后将原来的表结构删除。删除后的数据不可以被恢复。
4.数据恢复不同:delete的数据是可以被恢复的,但是truncate,drop删除的数据是不会被恢复的。
5.执行效率:drop > truncate>delete
6.truncate会重置自增列,而delete不会。