表的增删查改

发布时间:2026/9/27 22:57:56
表的增删查改 bit::Shadow✧(≖ ◡ ≖✿目录什么算“冲突”1.增1.1insert 与 on duplicate keyduplicate key1.2replace2.查2.1distinct2.2where2.2.1运算符比较运算符逻辑运算符2.2.2 like2.2.3 desc 与 asc2.2.4 limit3.改4.删4.1delete4.2 truncate*聚合函数分组聚合查询什么算“冲突”冲突指插入或修改后的数据违反了表上的唯一性约束主要包括主键冲突PRIMARY KEY唯一键冲突UNIQUE KEY对于REPLACE还包括多个唯一约束同时冲突注意普通索引、非唯一索引不会造成冲突。1.增1.1insert 与 on duplicate keyinsert [into] table_name(f1, f2, ...) values(v_1, v_2, ...), values(v_1, v_2, ...);duplicate key解决插入冲突问题回显描述。--- 必然导致目标插入insert table_name(f1,f2,...) values(v_1, v_2, ...) on duplicate key update f1v_1, f2v_2, ...;返回值-- 2 rows affected: 表中已有数据冲突update后被执行-- 1 row affected表中没有数据冲突直接插入成功-- 0 row affected表中有数据冲突且与update后相同注意一定要关注自增主键值其值可能会受影响。1.2replace用法是insert的平替duplicate key冲突。-- 1 row affected无冲突插入成功。-- 2 row affected有冲突删除原内容后插入。‘8’代表的主键冲突下replace的使用2.查2.1distinctselect distinct f1,f2 from table_name; -- 查找(f1,f2)这完全整体不重复的值。不是f1不同即可2.2where查询语文成绩小于60分的人2.2.1运算符比较运算符比较运算符说明, , , 大于大于等于小于小于等于等于NULL 不安全例如 NULL NULL 的结果是 NULL等于NULL 安全例如 NULL NULL 的结果是 TRUE(1)!, 不等于BETWEEN a0 AND a1范围匹配[a0, a1]如果 a0 value a1返回 TRUE(1)IN (option, ...)如果是 option 中的任意一个返回 TRUE(1)IS NULL是 NULLIS NOT NULL不是 NULLLIKE模糊匹配。% 表示任意多个包括 0 个任意字符_ 表示任意一个字符逻辑运算符逻辑运算符说明and多个条件必须都为 TRUE(1)结果才是 TRUE(1)or任意一个条件为 TRUE(1)结果为 TRUE(1)not条件为 TRUE(1)结果为 FALSE(0)查询语文成绩大于80分且数学成绩大于70分2.2.2 likewhere f1 [not] like{val}查找姓孙的人的成绩select* from score where name like孙%;模糊匹配查找语文成绩不是以6开头的成绩2.2.3 desc 与 ascorder by desc 或者 order by ascselect f1,f2 from table_name order by f1 desc, f2 desc;查询成绩按照数学优先 语文次之的顺序排列只有当数学成绩一致时才会对语文成绩进行比较2.2.4 limitlimit [num]-- 自筛选后表限定num行显现在上例的基础上限定3行查询总分排名前五的同学若总分一致按照数学成绩排名mysql select name,chinesemathenglish 总分, - math from score - order by chinesemathenglish desc, - math desc limit 5;limit head, num; 从第head1位开始取num个mysql select name,chinesemathenglish 总分, - math from score - order by chinesemathenglish desc, - math desc limit 5;注意limit是限制“显示”而不限制“筛选”条件。3.改更改某列某行数据update 表名 set f1newVal [where . . . ] ;将杜甫的数学成绩提高2分4.删4.1delete删除表内某行数据delete from 表名 [where . . .;注意不使用where定位条件将导致整个表数据被删除。将“老子”的行删除4.2 truncatetruncate [table] table_name;1.只能对整个表使用不能像delete一样可以进行筛选删除。2.truncate不经过事务。不会被MySQL日志记录所以其造成的后果无法回滚。3.truncate较delete更快并且delete无法重置的 auto_increment 它 truncate 可以重置。*聚合函数count([distinct] value)返回查询目标的个数sum([distinct] value)返回 计和值不是数字则无意义avg([distinct] value)返回平均值不是数字无意义min([distinct] value)返回最小值不是数字无意义max(distinct] value)返回最大值不是数字无意义“distinct”重复的单位不进入计算计班级人数sum 计语文 数学 英语和值avg 计语文 数学 英语 平均分除去孔子的语文 数学 英语 平均分养成的好习惯1.勿方便而滥用重命名2.字符串以单引号3.即使有auto_increment也要明确指定分组聚合查询group by . . .-- 用于不同组间的隔离having ....-- 用于约束分组计在孔子不参与统计 显示 语文平均分 低于70 的 班级注意where内不能放置聚合函数因为where快于group by的分组此时还没有分组完毕。用例DROP TABLE IF EXISTS score; CREATE TABLE score ( id int unsigned NOT NULL AUTO_INCREMENT, class varchar(20) NOT NULL COMMENT 班级, name varchar(20) NOT NULL COMMENT 同学姓名, gender char(1) NOT NULL COMMENT 性别男/女, chinese float DEFAULT 0 COMMENT 语文成绩, math float DEFAULT 0 COMMENT 数学成绩, english float DEFAULT 0 COMMENT 英语成绩, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT INTO score (class, name, gender, chinese, math, english) VALUES (一班, 孔子, 男, 58.0, 42.5, 36.0), (一班, 孟子, 男, 65.5, 51.0, 47.5), (一班, 老子, 男, 72.0, 38.5, 55.0), (一班, 庄子, 男, 49.5, 60.0, 28.5), (一班, 墨子, 男, 33.0, 75.5, 41.0), (二班, 荀子, 男, 61.5, 44.0, 52.5), (二班, 韩非, 男, 55.0, 68.5, 39.0), (二班, 屈原, 男, 78.5, 29.5, 63.0), (二班, 司马迁, 男, 67.0, 35.0, 71.5), (二班, 诸葛亮, 男, 44.5, 88.0, 46.5), (三班, 曹操, 男, 59.0, 62.5, 33.0), (三班, 李白, 男, 85.5, 21.0, 58.5), (三班, 杜甫, 男, 74.0, 18.5, 66.0), (三班, 苏轼, 男, 69.5, 47.0, 79.0), (三班, 王阳明, 男, 52.0, 71.5, 43.5);OJ.1批量插入数据_牛客题霸_牛客网2找出所有员工当前薪水salary情况_牛客题霸_牛客网3查找最晚入职员工的所有信息_牛客题霸_牛客网4查找入职员工时间升序排名的情况下的倒数第三的员工所有信息_牛客题霸_牛客网5查找薪水记录超过15条的员工号emp_no以及其对应的记录次_牛客题霸_牛客网6获取所有部门当前manager的当前薪水情况给出dept__牛客题霸_牛客网7从titles表获取按照title进行分组_牛客题霸_牛客网87182. 查找重复的电子邮箱 - 力扣LeetCode9 595. 大的国家 - 力扣LeetCode01https://leetcode.com/problems/nth-highest-salary/description/感谢支持长期连载欢迎关注