资讯详情

5.表中数据的操作——CRUD

📅 2026/10/18 5:35:45 | 华诺云谱 👁 阅读
5.表中数据的操作——CRUD
【目标】掌握CRUD——CREATE创建、RETIRE查询、UPDATE更新、DELETE删除1.CREATE创建新增数据的指令INSERT [INTO] table_name[(column [, column] ...)]VALUES (value_list) [, (value_list)] ...• table_name要插入的表的表名• [(column [, column] ...)]字段名可不写但不写的情况下默认是要给所有的列都插值• VALUES (value_list)插入的真实数据实例如下插入前先不要执着这行指令是什么意思只需要知道他是查询整个表数据的指令这个表是空的1.1 全列插入一、单⾏数据全列插⼊注意在全列插入的情况下以上写法和以下写法是等同的二、多行数据全列插入同样的不指定字段也是可以的同上这里不进行演示。强烈推荐加上1.2 指定列插入一、单行数据指定列插入在指定列插入时未被指定的列会按照默认值自动插入由于age最初默认值指定的时NULL所以表格里 钱七 未被指定的 age 这一列为 NULL二、多行数据指定列插入1.3 单行数据插入 和 多行数据插入 的效率高低结论多行数据插入的效率更高原因如下原因说明减少网络往返单行插 1000 次 1000 次网络传输多行插 1 次 1 次减少 SQL 解析单行每条都要解析多行只解析一次减少事务开销单行每条都可能开事务多行一个事务搞定减少索引更新次数批量更新索引比逐条更新快名词解释一、事务就是“一组要么全部成功、要么全部失败”的操作。这是一条 SQL插三行自带原子性INSERT INTO user (name) VALUES (张三), (李四), (王五);这是三条 SQL每条插一行需要事务INSERT INTO user (name) VALUES (张三);INSERT INTO user (name) VALUES (李四);INSERT INTO user (name) VALUES (王五);相对于多行插入来说单行插入万一中断比如前两条插入成功第三条插入失败。这样就会导致数据不一致在业务中是很危险的操作。二、索引就是数据库里的“目录”用来快速找到数据。逐条更新每插一行索引就更新一次批量更新多行一起插索引合并更新一次2.RETIRE查询在这里要提醒一句查询操作仅是查询其中涉及的以表达式的方式返回的结果也只是查询后的结果对数据库中的数据并无实质影响。SELECT [DISTINCT] select_expr [, select_expr] ...[FROM table_references][WHERE where_condition]GROUP BY {col_name | expr}, ...][HAVING where_condition][ORDER BY {col_name | expr } [ASC | DESC], ... ][LIMIT {[offset,] row_count | row_count OFFSET offset}]以上为查询的语句大家不要疑惑具体的操作见下等大家熟悉之后就会感到简单了先构造一个成绩表2.1 全列查询全列查询的指令SELECT * FROM 表名;• SELECT关键字查询的意思• *表示全列的的意思• FROM来自于他所查询的内容来自于哪个表提醒这样的语句是非常危险的原因如下问题说明后果多查不需要的列只查 2 列却把 20 列都查出来网络传输大、内存占用大、磁盘 IO 多会导致服务器响应过慢表结构一变就出错按位置取值的代码表加列后位置全变取错值、程序 bug可能暴露敏感字段密码、身份证、手机号等被一并查出安全风险大可读性差不知道到底要哪几列难维护、难理解大字段拖慢表里有 TEXT/BLOBSELECT *可能传几 MB慢得离谱2.2 指定列查询一、指定列查询的指令SELECT 字段名[,字段名][,......] FROM 表名;二、查询字段为表达式SELECT 表达式 FROM 表名;这里的表达式包含常量和常量运算、常量和变量运算、变量和变量运算等等这里可以为表达式指定名字SELECT 表达式 AS 自定义命名 FROM 表名;示例一把 chinese10 叫做 new_chinese实例二把 chinesemathenglish 叫做 sum2.3 结果去重查询结果去重查询指令SELECT DISTINCT去重指标FROM 表名这个去重指标可能是一个字段也可能是多个字段• 一个字段单列去重表示会对某一列进行去重打印操作•多个字段组合去重表示会对这个组合进行去重打印操作只有两条数据关于这个组合中的每一个字段都相同那么才能去重问题面临两条或者多条数据重复时到底去掉哪一条数据回答保留首先扫描到的去除后扫描到的重复的数据需要注意的是它保留的是先扫描到的而并非表中从上到下的去重系列的第一个因为扫描不一定是从上到下来的一、单列去重可以观察到 唐三藏和猪悟能 的数学成绩一样那么我们就可以根据数学成绩对他们去重从结果上看后面的那个 98 是后扫描到的所以去重把后面那个 98 去除掉二、组合去重由于表中并没有完全符合 id,name,math完全相同的两条数据 所以结果上并没有进行去重。有兴趣的可以自己设计一组数据进行操作。2.4 where条件查询where条件查询指令SELECT 字段名[, 字段名][,......] FROM 表名 WHERE 条件一、运算符1、比较运算符运算符说明、、、大于、大于等于、小于、小于等于等于。对 NULL 不安全比如NULL NULL结果还是 NULL等于。对 NULL 安全比如NULL NULL结果是 TRUE(1)!、不等于BETWEEN a0 AND a1范围匹配[a0, a1]如果a0 value a1返回 TRUE(1)NOT BETWEEN取反IN (option, ...)如果 value 在 option 列表中返回 TRUE(1)NOT IN取反IS NULL是 NULLIS NOT NULL不是 NULLLIKE模糊匹配%表示任意多个包括 0 个字符_表示任意一个字符NOT LIKE取反2、逻辑运算符运算符说明AND多个条件必须都为 TRUE(1)结果才是 TRUE(1)OR任意一个条件为 TRUE(1)结果为 TRUE(1)NOT条件为 TRUE(1)结果为 FALSE(0)二、基本查询1.查询语⽂成绩⾼于英语成绩的同学2.总分在200分以下的同学三、AND和OR1.查询语⽂成绩⼤于80分且英语成绩⼤于80分的同学2.AND的优先级比OR高四、范围查询语⽂成绩在[80,90]分的同学及语⽂成绩这种写法等同于五、模糊查询通配符%表示任意多个包括 0 个字符不包括方向在左边只能代表左边_表示任意一个字符不包括方向在左边只能代表左边1.查询所有姓孙的同学2.查询姓孙且姓名共有两个字同学六、NULL查询写入一条数据1.查询英语成绩为NULL的记录2.查询英语成绩不为NULL的记录3.NULL与其他值进⾏运算结果为NULL提醒一句NULL 不是“空”也不是“0”而是“不知道 / 未知 / 没有值”。2.5 Order by排序查询Order by排序查询指令SELECT ... FROM 表名 ORDER BY 指标 [ASC | DESC];-- ASC 为升序从⼩到⼤DESC为降序从⼤到⼩-- 默认为 ASC但是强烈建议表名排序顺序ORDER BY ... DESC里的 DESC 是 DESCENDING意思是降序DESC 表名里的 DESC 是 DESCRIBE意思是查看表结构。1.按数学成绩从低到⾼排序升序2.按英语成绩从⾼到低排序降序3.所有英语成绩不为NULL的同学按语⽂成绩从⾼到低排序2.6 分页查询• 起始下标为 0• 从 0 开始筛选 num 条结果SELECT ... FROM 表名 LIMIT num;• 从 start 开始筛选 num 条结果SELECT ... FROM 表名 LIMIT start,num• 从 start 开始筛选 num 条结果⽐第⼆种⽤法更明确建议使用SELECT ... FROM 表名LIMIT num OFFSET start;1.查询前三条数据2.查询第四条到第六条数据或者是更推荐这样写3.UPDATE更新更新的指令UPDATE 表名 SET 修改1[,修改2][,...] [WHERE ...] [ORDER BY ...] [LIMIT ...]需要注意的是UPDATE操作的时候如果不加以限制那么修改的将会是整张表中的所有数据是非常危险的操作1.将孙悟空同学的数学成绩变更为80分修改前修改后2.将总成绩倒数前三的3位同学的数学成绩加上30分修改前修改后注意1.update exam set mathmath30 order by chinesemathenglish asc limit 3 offset 0;这种写法是错的原因是UPDATE语句里不能用OFFSET。2.这里不能写成math30因为SQL语句不支持。4.DELETE删除删除的指令DELETE FROM 表名 [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]1.删除孙悟空同学的考试成绩删除前删除后一、核心问题DELETE 不加限制条件会出现什么后果答案整张表的数据全部被删除清空非常危险。二、能否恢复可以恢复。每条执行的 SQL 都会被记录到日志中把日志中记录的操作再执行一遍基本上就可以完成恢复三、生产环境怎么做生产环境中一般不去使用DELETE操作。替代方案软删除逻辑删除做法说明在表中加一个deleteState字段表示这条记录是否删除0正常没有删除1已删除用UPDATE操作更新deleteState字段实现删除功能特点被删除的数据并没有实质上删除类似于队列中的删除元素——覆盖而是始终存在于数据库中。5.总结新增INSERT INTO 表名 VALUES(field1[,field2][,...])查询SELECT ... FROM 表名更新UPDATE 表名 SET 修改1[,修改2][,...]删除DELETE FROM 表名表数据的CRUD并不困难希望各位能够勤加练习做出自己的总结这样才能够对该部分熟练掌握。愿各位在数据库的世界里越走越稳越学越通透共勉
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑