1.表的增删查改
表数据的插入
大致上表的操作如下:表的创建,读取,更新,删除
首先创建一张表:
插入语句:
insert [into] table_name (列属性) values (对应列属性的值)[,(对应列属性的值)];
[]内部的语句可以省略
eg:
如果不指明插入的列明,这时需要values后需要把每一列的值都写出来。(全列插入)
对于主键和唯一键来讲,可能因为冲突导致插入失败,这时应该更新对应键值的值
insert into table_name (col_name) values (col_value) on Duplicate key update col_name= new_colval;
-- 不存在主键或唯一键冲突时插入,否则更新主键对应行的值
-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新
eg:
表数据的替换
-- 主键 或者 唯一键 没有冲突,则直接插入;
-- 主键 或者 唯一键 如果冲突,则删除后再插入
--语义上和上一条相同
replace into table_name (col_name...) values (col_value...);
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,删除后重新插入
eg:
表数据的查询
select
[distinct] {* | {column [, column] ...} ---需要查询的列
[from table_name] ---查询表名
[where ...] 筛选条件
[order by column [ASC | DESC], ...] ---升序排列或降序排列
limit ...;
首先创建表:
全列查询
select * from table_name;
通常不使用全列查询。
- 查询的列越多,意味着需要传输的数据量越大。
- 可能会影响索引的使用。
全列查询最好限制显示行数:
select * from table_name limit row_num;
指定列名查询
select [distinct (去重)] col_name1,col_name2,[col_name1+col_name2(表达式) as new_name]... from table_name;
--显示的列顺序与查找的顺序有关。
select具有计算表达式的能力,使用as来将计算的结果进行重命名
去重搜索:
①where条件查询
比较运算符:
逻辑运算符:级联多个where条件
下面是练习:
筛选数学成绩是98,99,58,59分的同学。
模糊匹配MySQL中所有环境变量带character的字段:
筛选结果排序显示:(默认升序 asc)
按照数学成绩升序排列:
降序显示desc
依次按照数学降序,语文和英语成绩升序排列:
当数学成绩相同时看语文成绩,如果语文成绩还相同再看英语成绩。
表数据的更新
update table_name set col_name=col_value
[where ...]
[order by ...]
[limit ...];
eg:将倒数三名学生的英语成绩+30分:
注意:MySQL中不支持+=和*=符号,需要写成math=math+30
表数据的删除
delete from table_name
[where ...]
[order by ...]
[limit ...];--后跟筛选条件
找到数据并删除。
删除倒数三名学生
注意:删除表后自增长序列号不会清空。
可以看到id自增长序列是从6开始而不是从0开始。
truncate [table] table_name
注意:
- 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
- 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
- 会重置 AUTO_INCREMENT 项
2.插入查询结果
删除表中重复数据:
思路:将去重的结果插入到另一个空表中。
注意:对于原表需要先进行备份,再对新表进行重命名。