数据库----表内容的增删查改

张开发
2026/4/24 7:48:00 15 分钟阅读

分享文章

数据库----表内容的增删查改
这里写目录标题font colorFF00FF1. Createfont colorFF00FF 1. 单行数据全列插入font colorFF00FF 2. 多行数据 指定列插入font colorFF00FF3. 插入否则更新font colorFF00FF4. replacefont colorFF00FF5. Retrievefont colorFF00FF1. selectfont colorFF00FF1. 全列查询font colorFF00FF2. 指定列查询font colorFF00FF3. 查询字段为表达式font colorFF00FF4. where 条件font colorFF00FF3. 结果排序font colorFF00FF4. 筛选分页结果font colorFF00FF5. updatefont colorFF00FF6. Deletefont colorFF00FF7. 截断表font colorFF00FF8. 插入查询结果font colorFF00FF9. 聚合函数font colorFF00FF10. group by子句的使用font colorFF00 where vs having1. Create1. 单行数据全列插入这里的y1(id,name)可以不写默认就是全列插入2. 多行数据 指定列插入3. 插入否则更新1. 由于 主键 或者 唯一键 对应的值已经存在而导致插入失败1. 0 row affected: 表中有冲突数据但冲突数据的值和 update 的值相等2. 1 row affected: 表中没有冲突数据数据被插入3. 2 rows affected: 表中有冲突数据并且数据已经被更新这个数据被插入不用写后面的on duplicate key update 那些东西因为没冲突就直接插入了select row_count()可以看到表被影响的行数4. replace1. 主键 或者 唯一键 没有冲突则直接插入2. 主键 或者 唯一键 如果冲突则删除后再插入1. row affected: 表中没有冲突数据数据被插入2. rows affected: 表中有冲突数据删除后重新插入5. Retrieve1. select1. 全列查询2. 指定列查询3. 查询字段为表达式1. 表达式不包含字段2. 表达式包含一个字段3. 表达式包含多个字段4. 为查询结果指定别名这里的as可以省略5. 结果去重4. where 条件比较运算符逻辑运算符1. 英语不及格的同学英语成绩 ( 60 )2. 语文成绩在 [80, 90] 分的同学及语文成绩3. 数学成绩是 73 或者 78 或者 98 或者 99 分的同学及数学成绩4. 姓孙的同学 及 孙某同学1. 姓孙的同学2. 孙某同学和孙xx同学5. 语文成绩好于英语成绩的同学6. 总分在 200 分以下的同学这里的total不能直接用where查因为先执行from然后再where最后select所以不认识total但是可以在select那里重命名7. 语文成绩 80 并且不姓孙的同学8. 孙某同学否则要求总成绩 200 并且 语文成绩 数学成绩 并且 英语成绩 809. NULL 的查询null不能用比较可以用和 is nullis not null3. 结果排序ASC 为升序从小到大– DESC 为降序从大到小– 默认为 ASC没有 ORDER BY 子句的查询返回的顺序是随机的1. 同学及数学成绩按数学成绩升序显示2. null排序null比任何值都要小排在最下面即便是‘’也比null大2. 查询同学各门成绩依次按 数学降序英语升序语文升序的方式显示如果数学成绩全相等才能轮到英语升序英语成绩全相等才能轮到语文升序否则就只能实现数学降序了3. 查询同学及总分由高到低这里可以使用total因为先from在select最后排序先有数据再排序否则先排序了再查数据效率低因为会对指定的数据排序不是全部排序后再去找指定的数据查询姓孙的同学或者姓曹的同学数学成绩结果按数学成绩由高到低显示这里加了wherefrom是1where是2select 是3order by是4如果有limit是5需要有数据才能排序只有数据准备好了才能显示limit的本质功能是显示4. 筛选分页结果起始下标为0--从 s 开始筛选 n 条结果 SELECT...FROM table_name[WHERE...][ORDER BY...]LIMIT s,n;--从0开始筛选 n 条结果 SELECT...FROM table_name[WHERE...][ORDER BY...]LIMIT n;--从 s 开始筛选 n 条结果比第二种用法更明确建议使用 SELECT...FROM table_name[WHERE...][ORDER BY...]LIMIT n OFFSET s;对未知表进行查询时最好加一条 LIMIT 1避免因为表中数据过大查询全表数据导致数据库卡死从0号下标开始连续读取1行从指定下标开始连续获取多少条记录按 id 进行分页每页 3 条记录分别显示 第 1、2、3 页5. update1. 将孙悟空同学的数学成绩变更为 80 分将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分将总成绩倒数前三的 3 位同学的数学成绩减去 30 分将所有同学的语文成绩更新为原来的 2 倍更新全表的语句慎用6. Delete删除孙悟空同学的考试成绩删除整张表数据注意删除整表操作要慎用7. 截断表但是在centos7这个截断的计数器是清空的就是下图的default1. 只能对整表操作不能像 DELETE 一样针对部分数据操作2. 实际上 MySQL 不对数据操作所以比 DELETE 更快但是TRUNCATE在删除数据的时候并不经过真正的事物所以无法回滚3. 会重置 AUTO_INCREMENT 项相当于delete的历史SQL语句会被bin.log的磁盘文件储存起来这叫主从同步bin log默认是被关闭的回源时直接把磁盘文件加载到内存把SQL语句全部执行一遍就恢复了8. 插入查询结果INSERT INTO table_name[(column[,column...])]SELECT我们要把一个表去重这个是查询时把表去重我们要的是改变原表1. 创建一张空表 no_duplicate_table结构和 duplicate_table 一样2. 将 duplicate_table 的去重数据插入到 no_duplicate_table3. 通过重命名表实现原子的去重操作为什么用rename呢因为rename是原子的如果要上传文件到linux假如数据很大所以上传很慢想把这个文件上传到linux的一个特定目录下就是写入数据它一定不是原子的所以一般把这个文件上传到临时目录下等全部上传成功后直接mv到特定的目录rename是同样的原理只是改文件名就是把文件系统的inode和目录的映射关系改了就是把inode改成和这个临时目录进行映射用rename就是单纯的想等一切都就绪了然后统一放入更新生效等9. 聚合函数1. 统计班级共有多少同学count(*) 和count(1) 忽略了对null的影响2. 统计本次考试数学成绩分数个数3. 统计的是去重数学成绩的数量4. 统计数学成绩总分5. 英语成绩80分的总成绩6. 统计平均分7. 返回英语最高分8. 返回 70 分以上的数学最低分10. group by子句的使用建一个雇员信息表来自oracle 9i的经典测试表EMP员工表DEPT部门表SALGRADE工资等级表1. 显示每个部门员工的平均工资和最高工资2. 显示每个部门的每种岗位的平均工资和最低工资显示平均工资低于2000的部门和它的平均工资统计各个部门的平均工资显示除了smith以外显示平均工资低于2000的部门和岗位和它的平均工资SQL查询中各个关键字的执行先后顺序 from on join where group by with having select distinct order by limit分组的目的是为了进行分组之后方便进行聚合统计分组group by deptno指定列名实际分组是用该列的不同行数据来进行分组的分组的条件deptno组内一定是相同的可以被聚合压缩分组 (分表)就是把一张表按照条件在逻辑上拆分了多个子表然后分别对各自的子表进行聚合统计这条SQL语句的执行顺序1. from emp2. where ename!‘SMITH’3. group by deptno,job4. avg(sal)5. having 平均工资20006. select deptno,job1. 先分组再聚合2. having是对聚合之后的结果进行条件筛选where vs having执行顺序的不同1. where对具体任意列进行条件筛选2. having对聚合之后的结果进行条件筛选不是只有磁盘上的表结构导入到mysql真实存在的表才叫表中间筛选出来的包括最终结果都是逻辑上的表MYSQL一切皆表

更多文章