MySQL【知识改变命运】06

前言:在05这节数据结构里面,我们知道select * from 这个操作很危险,如果数据库很大,会把服务器资源耗尽,接下来提到的查询可以有效的限制返回记录

1:分页查询

分页查询可以有效控制一次查询出来的结果集的记录条数,可以有效缓解减少数据库服务的压力,对用户也很好

1.1:语法:加粗样式

-- 起始下标为 0
-- 从 0 开始,筛选 num 条结果
select from table_name [where...] [order by] limit num;
-- 从 start 开始,筛选 num 条结果
select from table_name [where...] [order by] limit start,num;
-- 从 start 开始,筛选 num 条结果,⽐第⼆种⽤法更明确,建议使⽤
select from table_name [where...] [order by] limit num offset start;

1.2:练习

限制两条,从第0条开始,只取前两条记录
在这里插入图片描述
在这里插入图片描述

限制两条,从第 2 条开始,只取前两条记录

在这里插入图片描述
注意:这里不是从条开始计数,而是从第零条,类似于数组

如果我们超过了表中的范围,会返回空结果集
在这里插入图片描述

limit start,num;
num offset start;
这两条语句表达效果一样

在这里插入图片描述
用页数查找
这里数据我们一共有 9条
在这里插入图片描述
页数=总页数/每页条数,如果有余数则+1;
根据页数计算起始的位置
srart从0开始,start=(页数-1)*每页显示1的记录数;
这个表一共有5页
查看第一页数据:
在这里插入图片描述
查看第三页数据:
在这里插入图片描述
查看最后一页:
在这里插入图片描述
最后一页,有几条数据就都几条

2Update 修改

2.1:语法

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
 SET assignment [, assignment] ...
 [WHERE where_condition]
 [ORDER BY ...]
 [LIMIT row_count]

对符合条件的结果进⾏列值更新
update 表名 set 列名 =值…;

2.2:练习

将孙悟空同学的数学成绩变更为 80 分
在这里插入图片描述

在这里插入图片描述
2条数据被影响,匹配两条记录,2条被更改。
将曹孟德同学的数学成绩变更为 60 分,语⽂成绩变更为 70 分
在这里插入图片描述
将总成绩前三的 3位同学的数学成绩加上 10 分
原表数据
在这里插入图片描述
排名
在这里插入图片描述
修改:

在这里插入图片描述
修改成功后查询
在这里插入图片描述

将所有同学的语⽂成绩更新为原来的 +10分
在这里插入图片描述

在这里插入图片描述

Update 注意事项
• 以原值的基础上做变更时,不能使⽤math += 30这样的语法
• 不加where条件时,会导致全表数据被列新,谨慎操作

3:Delete 删除

3.1:语法

 DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

3.2:练习

删除孙悟空同学的考试成绩
原表:
在这里插入图片描述
删除后的表:
在这里插入图片描述
delete不加条件限制很危险
在这里插入图片描述
删掉表中的全部内容;
在这里插入图片描述

在这里插入图片描述

4:小总结

新增:insert into 表名
查询:select 列名 from 表名
修改:update 表名
删除:delete from 表名

insert ,update ,delete
执行成功返回的是受影响的行数(整数)
select
执行成功之后返回的是一个结果集(集合)

5:截断表

5.1:语法

1 TRUNCATE [TABLE] tbl_name

创建一个表
在这里插入图片描述
在这里插入图片描述
我们删除所有数据后,再次写入新的值,我们看看有什么效果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们会发现,自增会从表记录中的值开始填充

执行截断操作:

在这里插入图片描述
我们再加入数据:
在这里插入图片描述

在这里插入图片描述
表回到了最初的创建时候状态
自增id也会从0开始

6:插入查询结果

6.1:语法:

INSERT INTO table_name [(column [, column ...])] SELECT ...

6.2:练习:

删除表中的重复记录,重复的数据只能有⼀份
创建一个表

在这里插入图片描述
**实现思路:**原始表中的数据⼀般不会主动删除,但是真正查询时不需要重复的数据,如果每次查询
都使⽤DISTINCT进⾏去重操作,会严重效率。可以创建⼀张与 t_recored 表结构相同的表,把
去重的记录写⼊到新表中,以后查询都从新表中查,这样真实的数据不丢失,同时⼜能保证查询效

创建一个新表:
在这里插入图片描述
这里有个小技巧:
语法:

create table new_table like old_table

可以创建一个相同的表结构的新表;
数据不会导入。
在这里插入图片描述

将去重的数据放入新表中:
在这里插入图片描述

7:聚合函数

7.1:语法

COUNT([DISTINCT] expr) 返回查询到的数据的 数量
SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr) 返回查询到的数据的 最⼤值,不是数字没有意义
MIN([DISTINCT] expr) 返回查询到的数据的 最⼩值,不是数字没有意义

7.1练习:

7.1.1:COUTN

• 统计exam表中有多少记录**
原表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以上有三种查询方式,'* ’ ,常数,列,如果求数据行数条数,建议用 ‘ * ’,如果用列求,他会自动忽略NULL值行。
列查询中:普通列不及主键列效率高;

在这里插入图片描述
统计语⽂成绩⼩于50分的学⽣个数
在这里插入图片描述

7.1.2:SUM

• 统计所有学生数学成绩总分**
在这里插入图片描述
统计所有学生英语成绩总分:
在这里插入图片描述
注意一下啊:所求得和会忽略列值为NULL的值
不能统计非数值的列
在这里插入图片描述
虽然没有报错,但是不符合预期。

7.1.3 :AVG

• 统计英语成绩的平均分
在这里插入图片描述
• 统计平均总分
在这里插入图片描述
补充小点:
语法:

ROUND(原来小数,小数点后位数)

在这里插入图片描述
在这里插入图片描述

7.1.4:MAX和MIN

• 查询英语最⾼分
在这里插入图片描述
如果我们把所有值改为NULL呢?
在这里插入图片描述
查看英语最低分:
在这里插入图片描述
查询 > 70 分以上的数学最低分
在这里插入图片描述
查询数学成绩的最⾼分与英语成绩的最低分
在这里插入图片描述
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2he8rojhlpicc

<think>好的,用户想了解如何实现搜索提示词功能,需要方法、框架和示例。首先,我应该回忆一下相关的知识,比如前端和后端的交互,动态加载提示词的方法。记得之前有看过引用[2]提到用JavaScript动态更新下拉框,这应该是一个关键点。 接下来,用户可能需要一个结构化的回答,按照步骤来讲解。可能需要分步骤,比如前端输入监听、后端处理、动态展示和交互处理。每个步骤需要详细说明技术实现,比如使用Ajax或者Fetch API来获取数据,然后用JavaScript更新DOM元素。 然后,框架部分,可能常用的有Vue.js或React,可以举一个简单的框架示例,比如使用Vue的v-for指令来渲染下拉列表。这样用户更容易理解如何在实际项目中应用。 示例代码部分,需要提供简单易懂的代码片段,比如HTML结构、JavaScript函数,以及后端的伪代码。确保代码正确,并且注释清晰,方便用户参考。 还要考虑性能优化,比如防抖处理,避免频繁请求后端,这点在输入监听时很重要。同时,安全性方面,防止XSS攻击,对用户输入进行过滤,这也是需要注意的地方。 用户可能还想知道如何测试这个功能,或者有哪些常见的坑,比如延迟加载、数据量大时的处理。但根据问题,主要聚焦在实现方法上,所以先集中在核心步骤。 最后,生成相关问题,可能包括如何优化性能、安全性措施、与不同框架的集成等。确保问题相关且有帮助,引导用户深入了解更多细节。</think>### 搜索提示词功能实现方法框架 #### 一、核心实现框架 1. **输入监听与请求触发** - 前端通过`input`事件监听用户输入变化 - 使用防抖函数(如300ms延迟)控制请求频率[^2] ```javascript const searchInput = document.getElementById('search-box'); searchInput.addEventListener('input', debounce(fetchSuggestions, 300)); ``` 2. **后端数据处理** - 构建关键词数据库(如Elasticsearch/MySQL) - 实现模糊匹配算法(如Levenshtein距离或正则匹配) ```python # Django示例视图 def get_suggestions(request): query = request.GET.get('q') results = Keyword.objects.filter(name__icontains=query)[:5] return JsonResponse({'suggestions': list(results.values())}) ``` 3. **动态展示组件** - 使用`<datalist>`或自定义下拉框 - 通过AJAX/Fetch动态加载数据[^2] ```html <input list="suggestion-list" id="search-box"> <datalist id="suggestion-list"></datalist> ``` #### 二、完整实现示例 ```javascript // 前端实现 function fetchSuggestions(e) { const query = e.target.value; if (query.length < 2) return; fetch(`/api/suggestions?q=${encodeURIComponent(query)}`) .then(res => res.json()) .then(data => { const datalist = document.getElementById('suggestion-list'); datalist.innerHTML = data.suggestions .map(item => `<option value="${item.name}">`) .join(''); }); } // 防抖函数实现 function debounce(func, delay) { let timeout; return (...args) => { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), delay); }; } ``` #### 三、关键优化点 1. **性能优化** - 设置最小触发长度(如输入3字符后才触发) - 后端使用缓存机制(Redis缓存热门查询) 2. **安全防护** - 输入内容过滤(防止XSS攻击) - 限制最大返回条目(如最多10条建议) 3. **交互增强** - 键盘导航支持(↑/↓键选择建议) - 高亮匹配字段(CSS样式处理) #### 四、框架适配方案 ```vue <!-- Vue.js组件示例 --> <template> <div> <input v-model="query" @input="onInput"> <ul v-show="showSuggestions"> <li v-for="(item, index) in suggestions" :key="index"> {{ item }} </li> </ul> </div> </template> <script> export default { data() { return { query: '', suggestions: [] } }, methods: { onInput: _.debounce(async function() { if (this.query.length > 2) { const res = await axios.get(`/api/suggest?q=${this.query}`); this.suggestions = res.data; } }, 300) } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值