MySQL其四,各种函数,以及模拟了炸裂函数创建用户等操作
目录
一、MySQL中的函数
1、IFNULL
2、IF
3、case (难点)
4、exists(难) --存在的意思
二、常见的函数
1、字符串函数
2、数学函数
3、日期函数 (使用频率不是很高)
4、其他函数
5、关于字符集的问题
6、mysql炸裂函数explode(mysql8.0 才支持的函数)
三、TCL(王牌彩电)
1、创建用户
2、赋予权限
3、如何修改mysql允许远程登录
1)该表法
2)通过TCL语句修改
4、在企业中mysql如何保证数据安全?
四、小练习
一、MySQL中的函数
什么是函数? 一个功能就是一个函数,一个函数就代表了一个功能。
1、IFNULL
当前⾯的值是null的时候,使⽤后⾯的默认值
什么是函数:sql中带括号的就是函数
() 其实就是用来传递参数的,有些函数有参数,有些没有,有些有一个参数,有些有多个。
ifnull 参数就是两个,第一个参数需要判断的字段,第二个是默认值
返回值: 一个函数运行完之后的结果就叫做返回值
select ifnull(null,100); --> 100
select ifnull(10,20); --> 10
select ifnull(comm,0) from emp; --> ifnull 在此时会执行很多次,就会有很多的返回值
2、IF
前⾯的条件如果成⽴,取值第⼀个,否则取值第⼆个。
if 函数有三个参数,第一个参数 boolean(布尔类型true false) , 第二个参数和第三个参数都是值
select if(10>20,1,0);mysql> select 800 > null;
+------------+
| 800 > null |
+------------+
| NULL |
+------------+
1 row in set (0.06 sec)mysql> select if(sal > ifnull(comm,0) ,sal,comm) from emp;
+------------------------------------+
| if(sal > ifnull(comm,0) ,sal,comm) |
+------------------------------------+
| 800.00 |
| 1600.00 |
| 1250.00 |
| 2975.00 |
| 1400.00 |
| 2850.00 |
| 2450.00 |
| 3000.00 |
| 5000.00 |
| 1500.00 |
| 1100.00 |
| 950.00 |
| 3000.00 |
| 1300.00 |
| NULL |
+------------------------------------+
15 rows in set (0.09 sec)
3、case (难点)
造数据:
-- 建表
create table `sc` (
`sname` varchar(20),`subject` varchar(20),`score` int
);
insert into `sc` values ('张小三', '语文', 78),('张小三', '数学', 77),('张小三', '英语', 90),('张小三', '历史', 89),('张小三', '体育', 80),('李小四', '数学', 90),('李小四', '英语', 80),('李小四', '体育', 88),('李小四', '政治', 88),('李小四', '历史', 78),('王小五', '语文', 90),('王小五', '英语', 80),('王小五', '政治', 89),('王小五', '体育', 90);
mysql> select * from sc;
+--------+---------+-------+
| sname | subject | score |
+--------+---------+-------+
| 张小三 | 语文 | 78 |
| 张小三 | 数学 | 77 |
| 张小三 | 英语 | 90 |
| 张小三 | 历史 | 89 |
| 张小三 | 体育 | 80 |
| 李小四 | 数学 | 90 |
| 李小四 | 英语 | 80 |
| 李小四 | 体育 | 88 |
| 李小四 | 政治 | 88 |
| 李小四 | 历史 | 78 |
| 王小五 | 语文 | 90 |
| 王小五 | 英语 | 80 |
| 王小五 | 政治 | 89 |
| 王小五 | 体育 | 90 |
+--------+---------+-------+
第一个需求:行转列
使用if 来编写这个需求:select sname,if(subject='语文',score,0) 语文,if(subject='数学',score,0) 数学,
if(subject='英语',score,0) 英语,
if(subject='历史',score,0) 历史,
if(subject='政治',score,0) 政治,
if(subject='体育',score,0) 体育from sc;
统计的结果:
+--------+------+------+------+------+------+------+
| sname | 语文 | 数学 | 英语 | 历史 | 政治 | 体育 |
+--------+------+------+------+------+------+------+
| 张小三 | 78 | 0 | 0 | 0 | 0 | 0 |
| 张小三 | 0 | 77 | 0 | 0 | 0 | 0 |
| 张小三 | 0 | 0 | 90 | 0 | 0 | 0 |
| 张小三 | 0 | 0 | 0 | 89 | 0 | 0 |
| 张小三 | 0 | 0 | 0 | 0 | 0 | 80 |
| 李小四 | 0 | 90 | 0 | 0 | 0 | 0 |
| 李小四 | 0 | 0 | 80 | 0 | 0 | 0 |
| 李小四 | 0 | 0 | 0 | 0 | 0 | 88 |
| 李小四 | 0 | 0 | 0 | 0 | 88 | 0 |
| 李小四 | 0 | 0 | 0 | 78 | 0 | 0 |
| 王小五 | 90 | 0 | 0 | 0 | 0 | 0 |
| 王小五 | 0 | 0 | 80 | 0 | 0 | 0 |
| 王小五 | 0 | 0 | 0 | 0 | 89 | 0 |
| 王小五 | 0 | 0 | 0 | 0 | 0 | 90 |
+--------+------+------+------+------+------+------+select sname,
sum(if(subject='语文',score,0)) 语文,
sum(if(subject='数学',score,0)) 数学,
sum(if(subject='英语',score,0)) 英语,
sum(if(subject='历史',score,0)) 历史,
sum(if(subject='政治',score,0)) 政治,
sum(if(subject='体育',score,0)) 体育from sc group by sname;+--------+------+------+------+------+------+------+
| sname | 语文 | 数学 | 英语 | 历史 | 政治 | 体育 |
+--------+------+------+------+------+------+------+
| 张小三 | 78 | 77 | 90 | 89 | 0 | 80 |
| 李小四 | 0 | 90 | 80 | 78 | 88 | 88 |
| 王小五 | 90 | 0 | 80 | 0 | 89 | 90 |
+--------+------+------+------+------+------+------+notepad++ 也支持 alt + 鼠标选择多行进行操作
学习一下case的用法:
case when ... then ... else ... end
分析:
case 开头
end 结尾
中间是 类似于 if else 需求:将分数分为优(80分以上)、良(60分到80分)、不及格(60分以下的)
select *,if(score >80,'优',if(score <60,'不及格','良')) 等级
from sc;另一种写法:
select *,case when score >80 then '优'when score <60 then '不及格'else '良'end 等级
from sc;
使用case语句重新编写第一个需求:
select sname,sum(case when subject='语文' then score else 0 end) '语文',sum(case when subject='数学' then score else 0 end) '数学',sum(case when subject='英语' then score else 0 end) '英语',sum(case when subject='历史' then score else 0 end) '历史',sum(case when subject='政治' then score else 0 end) '政治',sum(case when subject='体育' then score else 0 end) '体育'
from sc group by sname;+--------+------+------+------+------+------+------+
| sname | 语文 | 数学 | 英语 | 历史 | 政治 | 体育 |
+--------+------+------+------+------+------+------+
| 张小三 | 78 | 77 | 90 | 89 | 0 | 80 |
| 李小四 | 0 | 90 | 80 | 78 | 88 | 88 |
| 王小五 | 90 | 0 | 80 | 0 | 89 | 90 |
+--------+------+------+------+------+------+------+
需求:将学科的名称翻译为英⽂的
mysql> select * from sc;
+--------+---------+-------+
| sname | subject | score |
+--------+---------+-------+
| 张小三 | 语文 | 78 |
| 张小三 | 数学 | 77 |
| 张小三 | 英语 | 90 |
| 张小三 | 历史 | 89 |
| 张小三 | 体育 | 80 |
| 李小四 | 数学 | 90 |
| 李小四 | 英语 | 80 |
| 李小四 | 体育 | 88 |
| 李小四 | 政治 | 88 |
| 李小四 | 历史 | 78 |
| 王小五 | 语文 | 90 |
| 王小五 | 英语 | 80 |
| 王小五 | 政治 | 89 |
| 王小五 | 体育 | 90 |
+--------+---------+-------+此时的需求是添加一列,这一列就是英文即可,一列 == 1个case
以下写法有点类似于if:
select *,case when subject ='语文' then 'chinese'when subject ='数学' then 'Math'when subject ='英语' then 'english'when subject ='历史' then 'history'when subject ='政治' then 'politics'when subject ='体育' then 'sport'end 英文学科名称
from sc;答案:
+--------+---------+-------+--------------+
| sname | subject | score | 英文学科名称 |
+--------+---------+-------+--------------+
| 张小三 | 语文 | 78 | chinese |
| 张小三 | 数学 | 77 | Math |
| 张小三 | 英语 | 90 | english |
| 张小三 | 历史 | 89 | history |
| 张小三 | 体育 | 80 | sport |
| 李小四 | 数学 | 90 | Math |
| 李小四 | 英语 | 80 | english |
| 李小四 | 体育 | 88 | sport |
| 李小四 | 政治 | 88 | politics |
| 李小四 | 历史 | 78 | history |
| 王小五 | 语文 | 90 | chinese |
| 王小五 | 英语 | 80 | english |
| 王小五 | 政治 | 89 | politics |
| 王小五 | 体育 | 90 | sport |
+--------+---------+-------+--------------+case的另一种写法: 类似于switch的写法
select *,case subjectwhen '语文' then 'chinese'when '数学' then 'Math'when '英语' then 'english'when '历史' then 'history'when '政治' then 'politics'when '体育' then 'sport'end 英文学科名称
from sc;
需求:
select sname 姓名,sum(score) 总成绩 from sc group by sname;
| 姓名 | 总成绩 |
+--------+--------+
| 张小三 | 414 |
| 李小四 | 424 |
| 王小五 | 349 |
+--------+--------+if版本的:
select sname 姓名,
sum(if(subject='语文',score,0)) 语文,
sum(if(subject='数学',score,0)) 数学,
sum(if(subject='英语',score,0)) 英语,
sum(if(subject='历史',score,0)) 历史,
sum(if(subject='政治',score,0)) 政治,
sum(if(subject='体育',score,0)) 体育,
sum(score) 总成绩from sc group by sname;case 版本:
select sname 姓名,sum(case when subject='语文' then score else 0 end) '语文',sum(case when subject='数学' then score else 0 end) '数学',sum(case when subject='英语' then score else 0 end) '英语',sum(case when subject='历史' then score else 0 end) '历史',sum(case when subject='政治' then score else 0 end) '政治',sum(case when subject='体育' then score else 0 end) '体育',sum(score) 总成绩
from sc group by sname;+--------+------+------+------+------+------+------+--------+
| 姓名 | 语文 | 数学 | 英语 | 历史 | 政治 | 体育 | 总成绩 |
+--------+------+------+------+------+------+------+--------+
| 张小三 | 78 | 77 | 90 | 89 | 0 | 80 | 414 |
| 李小四 | 0 | 90 | 80 | 78 | 88 | 88 | 424 |
| 王小五 | 90 | 0 | 80 | 0 | 89 | 90 | 349 |
+--------+------+------+------+------+------+------+--------+
需求:
分析:可以通过两种不同的集合合并在一起
select subject,sum(score) 总成绩 from sc group by subject;+---------+--------+
| subject | 总成绩 |
+---------+--------+
| 语文 | 168 |
| 数学 | 167 |
| 英语 | 250 |
| 历史 | 167 |
| 体育 | 258 |
| 政治 | 177 |
+---------+--------+select '总成绩' as '姓名',sum(case when subject='语文' then score else 0 end) '语文',sum(case when subject='数学' then score else 0 end) '数学',sum(case when subject='英语' then score else 0 end) '英语',sum(case when subject='历史' then score else 0 end) '历史',sum(case when subject='政治' then score else 0 end) '政治',sum(case when subject='体育' then score else 0 end) '体育',sum(score) '总成绩'
from sc;
结果集:底座
+--------+------+------+------+------+------+------+--------+
| 姓名 | 语文 | 数学 | 英语 | 历史 | 政治 | 体育 | 总成绩 |
+--------+------+------+------+------+------+------+--------+
| 总成绩 | 168 | 167 | 250 | 167 | 177 | 258 | 1187 |
+--------+------+------+------+------+------+------+--------+合并两个结果集:
select sname 姓名,sum(case when subject='语文' then score else 0 end) '语文',sum(case when subject='数学' then score else 0 end) '数学',sum(case when subject='英语' then score else 0 end) '英语',sum(case when subject='历史' then score else 0 end) '历史',sum(case when subject='政治' then score else 0 end) '政治',sum(case when subject='体育' then score else 0 end) '体育',sum(score) 总成绩
from sc group by sname
union all
select '总成绩' as '姓名',sum(case when subject='语文' then score else 0 end) '语文',sum(case when subject='数学' then score else 0 end) '数学',sum(case when subject='英语' then score else 0 end) '英语',sum(case when subject='历史' then score else 0 end) '历史',sum(case when subject='政治' then score else 0 end) '政治',sum(case when subject='体育' then score else 0 end) '体育',sum(score) '总成绩'
from sc;+--------+------+------+------+------+------+------+--------+
| 姓名 | 语文 | 数学 | 英语 | 历史 | 政治 | 体育 | 总成绩 |
+--------+------+------+------+------+------+------+--------+
| 张小三 | 78 | 77 | 90 | 89 | 0 | 80 | 414 |
| 李小四 | 0 | 90 | 80 | 78 | 88 | 88 | 424 |
| 王小五 | 90 | 0 | 80 | 0 | 89 | 90 | 349 |
| 总成绩 | 168 | 167 | 250 | 167 | 177 | 258 | 1187 |
+--------+------+------+------+------+------+------+--------+if版本的写法:
-- if实现版本
select `sname` as '姓名',sum(if(`subject` = '语文', `score`, 0)) as '语文',sum(if(`subject` = '数学', `score`, 0)) as '数学',sum(if(`subject` = '英语', `score`, 0)) as '英语',sum(if(`subject` = '历史', `score`, 0)) as '历史',sum(if(`subject` = '政治', `score`, 0)) as '政治',sum(if(`subject` = '体育', `score`, 0)) as '体育',sum(`score`) as '总成绩'
from `sc` group by `sname`
union
select '总成绩' as '姓名',sum(if(`subject` = '语文', `score`, 0)) as '语文',sum(if(`subject` = '数学', `score`, 0)) as '数学',sum(if(`subject` = '英语', `score`, 0)) as '英语',sum(if(`subject` = '历史', `score`, 0)) as '历史',sum(if(`subject` = '政治', `score`, 0)) as '政治',sum(if(`subject` = '体育', `score`, 0)) as '体育',sum(`score`) as '总成绩'
from `sc`;解释一下:
select 'chufaxingjin' 姓名 from sc ;
4、exists(难) --存在的意思
顾名思义,就是判断数据是否存在的!exists的作用为判断一个表中的数据,是否在另外的一张表中能够查询到与之对应的数据
效率要比连接查询和子查询高!
案例1: 查询有员工的部门
select * from dept where deptno in (select distinct deptno from emp);+--------+------------+----------+
| deptno | dname | loc |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
+--------+------------+----------+语法:
select xxx from 表 where [not] exists (集合)
使用exists 编写sql:
select * from dept where exists(select * from emp where emp.deptno = dept.deptno
);
+--------+------------+----------+
| deptno | dname | loc |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
+--------+------------+----------+select * from dept where exists(select * from emp where emp.deptno = dept.deptno
);查询一个数据是否存在,存在里面的结果集中,如果存在,显示出来,不存在不显示。
里面查询的是什么结果集不重要,主要存在即可。案例2: 查询没有员工的部门
select * from dept where not exists(select * from emp where emp.deptno = dept.deptno
);
+--------+------------+--------+
| deptno | dname | loc |
+--------+------------+--------+
| 40 | OPERATIONS | BOSTON |
+--------+------------+--------+
1 row in set (0.10 sec)-- 案例3: 查询有部门的员工
select * from emp where exists(select 1 from dept where emp.deptno = dept.deptno);-- 案例4: 查询有下属的员工信息
select * from emp where exists(select 1 from emp e2 where e2.mgr = emp.empno);
-- 查询有领导的员工信息
select * from emp where exists(select 1 from emp e2 where e2.empno = emp.mgr);exists : 都可以使用我们以前的sql语句替换,但是使用exists 执行效率高。
二、常见的函数
1、字符串函数
字符串是万能的!!!不管在任何学科中!!!1、获取字符串⻓度
select char_length('Hello');
2、变⼤写
select upper('Hello');
select UCASE('Hello');
3、变⼩写
select lower('Hello');
select lcase('Hello');
4、空⽩字符串切割
select trim(' Hello '); // 左右两边的空⽩字符全部切掉
select ltrim(' Hello ');// 只切除左边的空⽩字符
select rtrim(' Hello ');// 只切右边
5、⽐较两个字符串是否相等,⽐较的肯定是内容
select strcmp('hello','hello'); // 如果相等返回0,不等于返回 1 或者 -1
select strcmp('hello2','hello');// 1
6、截取⼀段字符串
select substr('hello',2,3); // 2 代表的是第⼆个字符的位置,3代表的是截取的⻓度
7、将字符串进⾏反转
select reverse('hello');
8、替换
select replace('hello','l','a');
9、字符串的拼接,有两种
1)使⽤某个拼接符进⾏拼接
select concat_ws(':','hello','world');
2) 不指定拼接符
select concat('hello','world');
10、数据进⾏格式化处理 最后⼀位进⾏四舍五⼊的处理
select format(3.1415926,2);
select format(3.145926,2);
拓展:
-- 字符串相关的函数
-- 返回ASCII码
select ASCII('a');
-- 返回字符串长度
select char_length('abcedf');
-- 拼接多个字符串
select concat('abc','-','bcd');
-- 将后面集合中的元素按照什么符号进行拼接
select concat_ws('~','a','b','c','e');
-- 第一个字符在后面集合的第几个位置
select FIELD('c','a','b','c','e');
select find_in_set('c','a,b,c');
-- 格式化数字 "#,###.##" 形式,并且四舍五入
select format(123123.1362,2);
-- 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
SELECT INSERT("google.com", 1, 5, "runoob");
-- 从字符串 s 中获取 s1 的开始位置
SELECT LOCATE('st','myteststring'); -- 5
SELECT POSITION('st' in 'myteststring'); -- 5
-- 变小写select lcase("Abc");
select lower("Abc");
-- 变大写
select upper("abc");
-- 返回字符串的前几个字符
select left("abcedf",3);
-- 想截取哪一段截取哪一段
select substr("abcedf",1,3);
SELECT MID("RUNOOB", 2, 3) ;
-- 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
select lpad("1",5,"0");
select lpad("10000",5,"0");
select rpad("1",5,"0");
-- 去重空格
select ltrim(" abceff ");
select rtrim(" abceff ");
select trim(" abceff ");
-- 返回第2个* 左边的所有数据
SELECT SUBSTRING_INDEX('a*b*c*d','*',2);
-- 返回空格键
select space(10);select "str" != "str";
select strcmp("a","b");
select strcmp("aaa","abc");-- 跟 left 相反
select right('abcedf',2);
-- 字符串反转
select reverse("abc");
-- 将字符串 s 重复 n 次
select repeat("hello",5);
-- 替换字符串
select replace("hello",'l','a');
2、数学函数
-- 绝对值
select abs(-1);
-- 天花板
select ceil(1.99);
-- 地板砖
select FLOOR(1.99);
-- 除以
select 10 div 5;
select 10/5;
-- 求最⼩值和最⼤值
select least(10,20,4,50,18);
select greatest(10,20,4,50,18) as 最⼤值;
-- 求余数
select 5%2;
select MOD(5,2);
-- 求次⽅
select POW(2,3);
-- 开根号
select sqrt(16);
-- PI
select PI();
-- 获取0到1之间的随机数,不包含1
select rand();
-- 随机获取 [3,10)
select floor (rand() * 7 + 3 );
-- 四舍五⼊
select round(1.56); -- 2
select round(1.22); -- 1
-- 保留⼩数点后⼏位,不会四舍五⼊
select TRUNCATE(1.35675,3);
3、日期函数 (使用频率不是很高)
--获取当前时间
select now() ; -- 百脑汇 Buy Now!-- 查询当前时间 年⽉⽇的形式
select CURRENT_DATE();
-- 时分秒的形式
select CURRENT_TIME();
-- 年⽉⽇时分秒
select CURRENT_TIMESTAMP();mysql> select adddate('2023-4-13',interval -1 day);
+--------------------------------------+
| adddate('2023-4-13',interval -1 day) |
+--------------------------------------+
| 2023-04-12 |
+--------------------------------------+
1 row in set (0.09 sec)mysql> select adddate('2023-4-13',interval 1 day);
+-------------------------------------+
| adddate('2023-4-13',interval 1 day) |
+-------------------------------------+
| 2023-04-14 |
+-------------------------------------+
1 row in set (0.09 sec)mysql> select addtime(now(),'01:00:00');
+---------------------------+
| addtime(now(),'01:00:00') |
+---------------------------+
| 2023-04-13 16:15:43 |
+---------------------------+
mysql> select dayname(now());
+----------------+
| dayname(now()) |
+----------------+
| Thursday |
+----------------+
1 row in set (0.08 sec)-- 某个⽇期多少天以后
select ADDDATE('2022-07-21',INTERVAL 10 DAY);
select ADDDATE('2022-07-21',10);
-- 某个时间多少⼩时分钟秒之后
select ADDTIME('2022-07-21 09:57:00','2:00:00');
-- 查询当前时间 年⽉⽇的形式
select CURRENT_DATE();
-- 时分秒的形式
select CURRENT_TIME();
-- 年⽉⽇时分秒
select CURRENT_TIMESTAMP();
-- 获取两个时间的差值
select abs(DATEDIFF('2022-07-11','2022-07-21'));
-- 将数据格式化为其他的样式 %r 可以展示上午还是下午
select DATE_FORMAT('2022-07-11','%y年%m⽉%d⽇');
-- 获取天
select day('2022-07-11');
select YEAR('2022-07-11');
-- 获取给定的⽉份
select MONTH('2022-07-11');
-- 该⽇期是这个⽉的第⼏天 == day
select DAYOFMONTH('2022-07-11');
select DAYOFWEEK('2022-07-11'); -- 2
select DAYOFYEAR('2022-07-11'); -- 192
-- 获取当前⽇期⼀个⽉之后的⽇期,并且告知是星期⼏
select DAYNAME(ADDDATE(CURRENT_DATE(),INTERVAL 1 MONTH)); -- Sunday
-- 获取某个⽉的最后⼀天的⽇期
select LAST_DAY(CURRENT_DATE());
-- 获取当前时间,包含时分秒,跟CURRENT_TIMESTAMP 效果⼀样
select now();
-- 专⻔⽤于减天数的函数
select SUBDATE(now(),1);
4、其他函数
mysql> select cast('1' as SIGNED);
+---------------------+
| cast('1' as SIGNED) |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.06 sec)mysql> select cast('2023-03-04' as Date);
+----------------------------+
| cast('2023-03-04' as Date) |
+----------------------------+
| 2023-03-04 |
+----------------------------+
1 row in set (0.07 sec)
-- 通过cast 进⾏数据类型转换
select CAST('2022-07-21' AS DATE);
-- 返回第⼀个⾮空字符串
select coalesce(null,null,'hello','world');
-- 查看当前所在的数据库
select DATABASE();
select CURRENT_USER();-- 获取最后⼀个主键的id值 插入错误也算一次
select LAST_INSERT_ID();
5、关于字符集的问题
所有乱码问题,都是字符集不匹配的问题
1、ASCII码 --老美老英
2、ISO8859-1
后来欧洲人也玩计算机,发现不行啊,还有很多符号(法语,德语)ASCII没办法表示啊,于是欧洲人自己也撸了一套编码,一个字节的长度,这套编码叫ISO。
3、GBK
再后来中国人也玩计算机,问题同理,整出一套GBK, 兼容了ASCII编码。
支持中文的字符集 GBK,GB2312,UTF-8
4、为什么会出现乱码?
任何的乱码都是字符集的问题。
比如:你在txt文档中编写了一篇中文的文章,字符集是gbk的。粘贴到notepad++中,notepad++此时的字符集假如是utf-8,中文有可能乱码。
读取的时候和写入的时候字符集不一致,就可能出现乱码。
5、数据库的字符集
1)每一个字段都可以设置单独的字符集(必须是字符串字段)
假如一个字段没有设置字符集,默认字符集是多少?看数据库的字符集是多少!
2)创建数据库的时候,可以指定字符集。假如没有指定,默认要看你安装数据库的时候指定的字符集是什么!
查看mysql 安装时,指定的是什么字符集?
show variables like '%character%';一般mysql8.0之前,默认字符集是latin,mysql8.0之后已经修改为了utf8。
6、mysql炸裂函数explode(mysql8.0 才支持的函数)
或者统计每种水果各有多少人喜欢?
create table user_like_eat(uid int(11),`like` varchar(200)
);
insert into user_like_eat values
(1,'香蕉,黄瓜,番茄'),
(2,'香蕉,冬瓜,黄瓜');
mysql中如何实现explode 的效果呢?先看一个案例:
use zuoye;CREATE TABLE `wow_info` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色id',`role` varchar(255) DEFAULT NULL COMMENT '角色简称',`role_cn` varchar(255) DEFAULT NULL COMMENT '角色类型',`role_pinyin` varchar(255) DEFAULT NULL COMMENT '角色拼音',`zhuangbei` varchar(255) DEFAULT NULL COMMENT '装备类型',`tianfu` varchar(255) DEFAULT NULL COMMENT '天赋类型',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;INSERT INTO `wow_info` VALUES (1, 'fs', '法师', 'fashi', '布甲', '冰法|火法|奥法');
INSERT INTO `wow_info` VALUES (2, 'ms', '牧师', 'mushi', '布甲', '神牧|戒律|暗牧');
INSERT INTO `wow_info` VALUES (3, 'ss', '术士', 'shushi', '布甲', '毁灭|痛苦|恶魔');
INSERT INTO `wow_info` VALUES (4, 'dz', '盗贼', 'daozei', '皮甲', '狂徒|刺杀|敏锐');
INSERT INTO `wow_info` VALUES (5, 'ws', '武僧', 'wuseng', '皮甲', '酒仙|踏风|织雾');
INSERT INTO `wow_info` VALUES (6, 'xd', '德鲁伊', 'xiaode', '皮甲', '恢复|平衡|野性|守护');
INSERT INTO `wow_info` VALUES (7, 'dh', '恶魔猎手', 'emolieshou', '皮甲', '复仇|浩劫');
INSERT INTO `wow_info` VALUES (8, 'lr', '猎人', 'lieren', '锁甲', '兽王|生存|射击');
INSERT INTO `wow_info` VALUES (9, 'sm', '萨满', 'saman', '锁甲', '恢复|增强|元素');
INSERT INTO `wow_info` VALUES (10, 'long', '龙人', 'longren', '锁甲', '湮灭|恩护|增辉');
INSERT INTO `wow_info` VALUES (11, 'dk', '死亡骑士', 'siwangqishi', '板甲', '鲜血|冰霜|邪恶');
INSERT INTO `wow_info` VALUES (12, 'zs', '战士', 'zhanshi', '板甲', '武器|狂暴|防护');
INSERT INTO `wow_info` VALUES (13, 'sq', '圣骑士', 'shengqi', '板甲', '神圣|防护|惩戒');SELECT role, SUBSTRING_INDEX(SUBSTRING_INDEX(tianfu, '|', numbers.n), '|', -1) AS exploded_value,CHAR_LENGTH(tianfu) - CHAR_LENGTH(REPLACE(tianfu, '|', '')),numbers.n - 1
FROM wow_infoJOIN (SELECT 1 AS nUNION ALLSELECT 2UNION ALLSELECT 3UNION ALLSELECT 4) numbersON CHAR_LENGTH(tianfu) - CHAR_LENGTH(REPLACE(tianfu, '|', '')) >= numbers.n - 1;select substring_index('冰法|火法|奥法','|',2);
select substring_index(substring_index('冰法|火法|奥法','|',1),'|',-1);
select char_length('冰法|火法|奥法');
select CHAR_LENGTH(REPLACE('冰法|火法|奥法', '|', ''));
知道了这个之后,我们修改一下我们的代码:
SELECT uid,SUBSTRING_INDEX(SUBSTRING_INDEX(`like`, ',', numbers.n), ',', -1) AS shuiguo
FROM user_like_eatJOIN (SELECT 1 AS nUNION ALLSELECT 2UNION ALLSELECT 3) numbersON CHAR_LENGTH(`like`) - CHAR_LENGTH(REPLACE(`like`, ',', '')) >= numbers.n - 1;
补充:mysql 如何实现split的效果呢?
第一种办法:使用存储过程:
DROP PROCEDURE IF EXISTS `splitString`;
DELIMITER $$
CREATE PROCEDURE `splitString`(IN f_string VARCHAR(1000), IN f_delimiter VARCHAR(5))
BEGINDECLARE cnt INT DEFAULT 0;DECLARE i INT DEFAULT 0;SET cnt = LENGTH(f_string) - LENGTH(REPLACE(f_string, f_delimiter, '')) + 1;DROP TABLE IF EXISTS temp_split_string;CREATE TEMPORARY TABLE temp_split_string (id INT AUTO_INCREMENT PRIMARY KEY, val VARCHAR(50));WHILE (i < cnt) DOINSERT INTO temp_split_string (val)SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(f_string, f_delimiter, i + 1), f_delimiter, -1);SET i = i + 1;END WHILE;SELECT * FROM temp_split_string;DROP TABLE IF EXISTS temp_split_string;
END$$
DELIMITER ;call splitString('a,b,c,d,e',',');
第二种办法:使用函数
DROP FUNCTION IF EXISTS fn_split;
DELIMITER $$
CREATE FUNCTION fn_split(s TEXT, del CHAR(1), i INT)
RETURNS VARCHAR(1024)
DETERMINISTIC -- always returns same results for same input parameters
SQL SECURITY INVOKER
BEGINDECLARE n INT;-- get max number of itemsSET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1;IF i > n THENRETURN NULL;ELSERETURN SUBSTRING_INDEX(SUBSTRING_INDEX(s, del, i), del, -1);END IF;
END$$
DELIMITER ;select fn_split('a,b,c,e,d',',',3);
三、TCL(王牌彩电)
TCL: 就是对mysql中的各种权限,以及账户密码等进⾏操作的语句。
1、创建用户
语法:
create user '⽤户名'@'主机名' identified by '密码';create user 'chufaxingjin'@'localhost' identified by '123456';
create user 'chufaxingjin'@'%' identified by '123456';
创建了⼀个⽤户,其实就是在mysql数据库中的user表中,插⼊了⼀条记录⽽已。
2、赋予权限
创建好的用户没有权限:
grant 权限1,权限2 ..... on 某个数据库中的⼀些表 to '⽤户名'@'主机名'
grant insert,update,select on `sql`.* to 'chufaxingjin'@'localhost';# 如果想创建⼀个新的超级管理员,赋予超级权限,可以使⽤如下的⽅式
all privileges 所有权限的意思
*.* 第⼀个* 所有数据库,第⼆个* 所有表
grant all privileges on *.* to 'chufaxingjin'@'localhost' identified by '123456' with grant option;执行报错,原因是8.0之前的写法和8.0之后的写法不一样了。
-- 8.0之前版本: grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
-- 创建用户
create user 'chufaxingjin'@'localhost' identified by '123456';
-- 赋权限
grant all privileges on *.* to 'chufaxingjin'@'localhost' with grant option;-- 撤销权限
revoke 权限名 [,权限名.....] on dbname.* from username@ip-- 刷新权限
flush privilages;
此时复习一下第一天的那个SQL:
修改密码永不过期:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;//更新一下用户的密码校验规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';//刷新权限
FLUSH PRIVILEGES;重置密码:
alter user 'root'@'localhost' identified by 'root';
需要学会重启mysql服务:
3、如何修改mysql允许远程登录
1)该表法
在mysql数据库中的user表中,修改数据,重启mysql服务
2)通过TCL语句修改
以前的超级管理员也有很多权限,但是不是 % 的。 %的意思是允许所有的IP访问mysql服务。
-- 创建用户
create user 'root'@'%' identified by 'root';
-- 赋权限
grant all privileges on *.* to 'root'@'%' with grant option;flush privileges;// 刷新权限,让其⽴即起作⽤。'root'@'localhost'
'root'@'%' 是一个用户吗? 不是同一个用户
4、在企业中mysql如何保证数据安全?
1、数据库的端口不要设置3306
2、mysql只支持某台服务器进行连接 mysql是可以设置 只允许某个IP可以访问我。
3、防火墙
4、可以购买一些防止被黑的服务。
四、小练习
CREATE TABLE Student(
s_id VARCHAR(20),
s_name VARCHAR(20) NOT NULL DEFAULT '',
s_birth VARCHAR(20) NOT NULL DEFAULT '',
s_sex VARCHAR(10) NOT NULL DEFAULT '',
PRIMARY KEY(s_id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '学生表';CREATE TABLE Course(
c_id VARCHAR(20),
c_name VARCHAR(20) NOT NULL DEFAULT '',
t_id VARCHAR(20) NOT NULL,
PRIMARY KEY(c_id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '课程表';CREATE TABLE Teacher(
t_id VARCHAR(20),
t_name VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY(t_id)
)ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '教师表';CREATE TABLE Score(
s_id VARCHAR(20),
c_id VARCHAR(20),
s_score INT(3),
PRIMARY KEY(s_id,c_id)
)ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成绩表';-- 插入学生数据:
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');-- 课程表数据
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');-- 教师表数据
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');-- 成绩表数据insert into Score values('01' , '01' , '80');
insert into Score values('01' , '02' , '90');
insert into Score values('01' , '03' , '99');
insert into Score values('02' , '01' , '70');
insert into Score values('02' , '02' , '60');
insert into Score values('02' , '03' , '80');
insert into Score values('03' , '01' , '80');
insert into Score values('03' , '02' , '80');
insert into Score values('03' , '03' , '80');
insert into Score values('04' , '01' , '50');
insert into Score values('04' , '02' , '30');
insert into Score values('04' , '03' , '20');
insert into Score values('05' , '01' , '76');
insert into Score values('05' , '02' , '87');
insert into Score values('06' , '01' , '31');
insert into Score values('06' , '03' , '34');
insert into Score values('07' , '02' , '89');
insert into Score values('07' , '03' , '98');
题目:
-- 查询"01"课程比"02"课程成绩高的学生的信息及课程分数-- 先找到同一个人的 01 和 02 成绩,并且 01 > 02
select * from student where s_id in (select s1.s_id from(select * from score where c_id ='01') s1,(select * from score s2 where c_id = '02') s2 where s1.s_id = s2.s_id and s1.s_score > s2.s_score);-- 再来一种写法
select * from student stu join
(select s1.s_id from(select * from score where c_id ='01') s1,(select * from score s2 where c_id = '02') s2 where s1.s_id = s2.s_id and s1.s_score > s2.s_score) ss
on stu.s_id = ss.s_id;-- 再来一个
select * from student stu,score s1, score s2where stu.s_id = s1.s_id and stu.s_id = s2.s_id and s1.s_score > s2.s_score and s1.c_id='01'and s2.c_id ='02';-- 查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩– (包括有成绩的和无成绩的)-- ans1:思路先找出平均成绩小于60分的同学,然后和学生表join在一起,还需要考虑没有考试的学生的情况
-- 思路一:没有考虑一个学生漏考一门或多门的情况
-- 假如一个考试有四门,一个学生只考了三门,此时我的这个sql就不准确了。
select s1.s_id,s1.s_name,avg(s2.s_score) avgScore from student s1,score s2where s1.s_id = s2.s_id group by s1.s_id,s1.s_name having avgScore < 60;
-- 修改版
select s1.s_id,s1.s_name,sum(s2.s_score)/3 avgScore from student s1,score s2where s1.s_id = s2.s_id group by s1.s_id,s1.s_name having avgScore < 60;-- 3 是手动写的,能不能统计出来
select count(1) from course;
-- 还需要考虑一个学生一门考试都没考,平均分是0分的情况
select s1.s_id,s1.s_name,sum(s2.s_score)/(select count(1) from course) avgScore from student s1,score s2where s1.s_id = s2.s_id group by s1.s_id,s1.s_name having avgScore < 60
union
select s_id,s_name,0 from student where not exists(select * from score where s_id = student.s_id);-- 查询没学过"张三"老师授课的同学的信息
-- ans1: 张三老师讲过哪些课,这些课程中哪些学生没有考试成绩,没有考试成绩就说明学生没有学过老师的课程。
select * from student where s_id not in (select s.s_id from student s, score s2 where s.s_id = s2.s_idand s2.c_id in (select c_id from teacher t , course c where t.t_id = c.t_id and t.t_name ='张三'));-- 查询没有学全所有课程的同学的信息
-- 思路:成绩表中,如果某个学生的成绩数量不等于学科总数,就说明这个学生某个科目没有成绩,没有成绩说明他没有学这个科目,把这些学生信息展示出来即可
select * from student where s_id not in(select student.s_id from student,score where student.s_id = score.s_id group by student.s_id having count(1) = (select count(1) from course));-- 查询和"01"号的同学学习的课程完全相同的其他同学的信息
--思路:可以先将01号同学的学习过的课程拼接成字符串,然后其他同学的课程也拼接成字符串,比较,如果相等说明学的课程就相等了。
select s1.s_id,s1.s_name, group_concat(s2.c_id order by s2.c_id) cids from student s1,score s2 where s1.s_id = s2.s_id group by s1.s_id,s1.s_namehaving cids = (select group_concat(s2.c_id order by s2.c_id) cids from score s2 where s2.s_id ='01' group by s2.s_id) and s1.s_id != '01';-- 宝俊的写法
select *
from student
where s_id in (select s_idfrom ((select group_concat(c_id) valuefrom scorewhere s_id = 01) s1join (select s_id, group_concat(c_id) valuefrom scoregroup by s_id) s2on s1.value = s2.value));此处需要知道一个函数的用法:
group_concat的使用方法为:
group_concat([DISTINCT] 字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])-- 查询各科成绩最高分、最低分和平均分:
以如下形式显示:
课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
– 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90-- -- 查询各科成绩最高分、最低分和平均分:
-- 以如下形式显示:
-- 课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
-- 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
selectc1.c_id,c1.c_name,max(s1.s_score),min(s1.s_score),round(sum(s1.s_score)/ (select count(1) from student),2) 平均分,concat(round(count(if(s1.s_score >= 60,1,null)) / (select count(1) from student)*100,2),'%') 及格率,concat(round(count(if(s1.s_score >= 70 and s1.s_score < 80,1,null)) / (select count(1) from student)*100,2),'%') 中等率,concat(round(count(if(s1.s_score >= 80 and s1.s_score < 90,1,null)) / (select count(1) from student)*100,2),'%') 优良率,concat(round(count(if(s1.s_score >= 90 ,1,null)) / (select count(1) from student)*100,2),'%') 优秀率
from score s1 join course c1 on s1.c_id = c1.c_id group by c1.c_id,c1.c_name
相关文章:
MySQL其四,各种函数,以及模拟了炸裂函数创建用户等操作
目录 一、MySQL中的函数 1、IFNULL 2、IF 3、case (难点) 4、exists(难) --存在的意思 二、常见的函数 1、字符串函数 2、数学函数 3、日期函数 (使用频率不是很高) 4、其他函数 5、关于字符集的问题 6、mysql炸裂函数…...
浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!
由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号。有所收获。这里总结下个人经验。 开讲前,先吐槽一下新浪云服务器,一个程序里的 同一个函数 在PC测试可以正常运行,在它那里就会挂的现象。 老样子,我将在代…...
ssm-springmvc-学习笔记
简介 简单的来说,就是一个在表述层负责和前端数据进行交互的框架 帮我们简化了许多从前端获取数据的步骤 springmvc基本流程 用户在原本的没有框架的时候请求会直接调用到controller这个类,但是其步骤非常繁琐 所以我们就使用springmvc进行简化 当用…...
nVisual 登录页页面配置说明
一、概述 nVisual登录页面可根据具体客户需要通过public\config\access.js文件进行自定义配置。页面可以大致分为4个部分,头部、底部、可移动区域以及页面中间的信息填写区域。其中头部和底部又包含头部左侧、头部中间、头部右侧、底部左侧、底部中间、底部右侧六个…...
Qt6开发自签名证书的https代理服务器
目标:制作一个具备类似Fiddler、Burpsuit、Wireshark的https协议代理抓包功能,但是集成到自己的app内,这样无需修改系统代理设置,使用QWebengineview通过自建的代理服务器,即可实现https包的实时监测、注入等自定义功能…...
crapy 爬虫框架的使用
1.scrapy框架安装 安装前先安装python3和pycharm 社区版 执行命令安装scrapy, pip install scrapy 2.创建项目 执行命令: scrapy startproject test_spider 如图: 3.使用pycharm大开项目并设置pipenv虚拟机环境 虚拟环境是为了依赖隔…...
Edge SCDN 边缘安全加速有什么用?
Edge SCDN是最新推出的边缘安全加速服务,它是一种融合了安全防护和内容分发加速功能的网络服务技术,通过在网络边缘部署服务器节点,来优化内容的传输和用户的访问体验,同时保障网络安全。 抵御 DDoS 攻击: Edge SCDN …...
使用aarch64-unknown-linux-musl编译生成静态ARM64可执行文件
使用aarch64-unknown-linux-musl编译生成静态ARM64可执行文件 使用aarch64-unknown-linux-musl编译生成静态ARM64可执行文件1. 安装aarch64-unknown-linux-musl目标2. 安装交叉编译工具链安装musl-cross-make 3. 配置Rust编译器使用交叉编译工具链4. 编译你的Rust项目5. 运行或…...
u-boot移植、配置、编译学习笔记【刚开始就中止了】
教程视频地址 https://www.bilibili.com/video/BV1L24y187cK 【这个视频中途停更了…原因是实际中需要去改u-boot的情况比较少】 使用的u-boot的源码 视频中使用的是 u-boot-2017.03 学习到这里,暂停u-boot的移植、配置、编译学习,原因是经过与老师…...
torchaudio.load 段错误
使用 torchaudio.load 时出现崩溃,如图 解决: 安装 ffmpeg conda install ffmpeg -c conda-forge 尝试但没解决问题的方法包括 重装 cuda,重装 pytorch,安装 PySoundFile、SoundFile、sox。...
自定义函数库
求两点距离 double dis(double x1, double y1, double x2, double y2){return sqrt(pow(x2-x1, 2)pow(y2-y1, 2)); }判断闰年 bool isLeapYear(int year){return year%40 && year%100!0 || year%4000; }判断素数 bool isPrime(int num){if(num<2) return false;f…...
Tomcat的下载和使用,配置控制台输出中文日志
目录 1. 简介2. 下载3. 使用3.1 文件夹展示3.1.1 控制台输出乱码 3.2 访问localhost:80803.3 访问静态资源 4. 总结 1. 简介 Tomcat,全称为Apache Tomcat,是一个开源的Web应用服务器和Servlet容器,由Apache软件基金会的Jakarta项目开发。它实…...
STM32应用开发——BH1750光照传感器详解
STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…...
java jar包加密 jar-protect
介绍 java 本身是开放性极强的语言,代码也容易被反编译,没有语言层面的一些常规保护机制,jar包很容易被反编译和破解。 受classfinal(已停止维护)设计启发,针对springboot日常项目开发,重新编写安全可靠的jar包加壳加密技术,用于保护软件版权。 使用说…...
NMEA/观测文件/导航电文
NMEA-0183 NMEA-0183是美国国家海洋电子协会为海用电子设备制定的标准格式。它包含了定位时间,纬度,经度,高度,定位所用的卫星数,DOP,差分状态和校正时段等很多信息。 参考:GPS NMEA数据包解析…...
HTTPS的工作原理深入解析
在当今互联网时代,网络安全已经成为了一个备受关注的话题。随着越来越多的个人隐私和商业数据被传输在网络中,如何确保这些数据在传输过程中的安全性成为了每个网络开发者和用户关注的核心问题之一。而HTTPS(HyperText Transfer Protocol Sec…...
pandas.core.frame.DataFrame怎么进行对象内容的读写
在 Python 中,pandas.core.frame.DataFrame 是 Pandas 数据库的核心数据结构,可以方便地读取和操作表格数据。以下是几种常见的读取内容的方法: 读取特定列 通过列名获取数据。 # 假设 df 是一个 DataFrame data df["列名"] # …...
OFCA-OpenHarmony人才认证题库答案
单选题 1.[单选题] 位于后台的应用,启动组件需校验的权限是: A: ohos.permission.DISTRIBUTED_DATASYNC B: ohos.permission.START_ABILITIES_FROM_BACKGROUND C: ohos.permission.ABILITY_BACKGROUND_COMMUNICATION D: ohos.permission.START_INVISIBLE_ABIL…...
若依微服务如何获取用户登录信息
文章目录 1、需求提出2、应用场景3、解决思路4、注意事项5、完整代码第一步:后端获取当前用户信息第二步:前端获取当前用户信息 6、运行结果后端测试:前端展示: 总结 1、需求提出 在微服务架构中,获取当前用户的登录信…...
题目 2778: 判断数正负
题目 2778: 判断数正负 时间限制: 2s 内存限制: 192MB 提交: 12161 解决: 6681 题目描述 给定一个整数N,判断其正负。 输入格式 一个整数N(-109 < N < 109) 输出格式 如果N > 0, 输出positive; 如果N 0, 输出zero; 如果N < 0, 输…...
【Hexo】博客自动生成AI摘要
工具介绍 如何让博客支持AI摘要,使用TianliGPT自动生成文章的AI摘要 摘要AI-文章摘要生成工具 文章摘要是一个专业的文字摘要生成工具,你可以将需要提取摘要的文本内容发送给TianliGPT,稍等一会他就可以给你发送一个基于这段文本内容的摘要。…...
vue3-count-to实现数字动态增长效果
vue3-count-to 是一个用于 Vue 3的数字计数动画库,常用于在页面上实现数字的动态增长效果,类似于从某个起始值渐变到目标值的效果。它可以用来显示各种数字、统计数据或展示动画效果。 1 安装 vue3-count-to 首先,你需要安装 vue3-count-to …...
第一课【输入输出】(题解)
1.向世界问好 题目描述 编程输出以下内容: Hello World! Im a C program. 输入格式 本题无输入。 输出格式 请按照样例输出,注意大小写、空格、感叹号,句号,单引号都必须使用英文输入法里的符号。 样例输入/输出 输入数据 1 本题无…...
边缘AI和智能音频专家XMOS全球首家增值经销商(VAR)落地中国
强强合作——XMOS与飞腾云达成全球首家增值经销协议以用智能音频技术和产品服务全球厂商和消费者 中国深圳,2024年12月——全球领先的软件定义系统级芯片(SoC)开发商XMOS宣布:公司已与飞腾云科技达成增值分销协议,授权…...
实战 | 某院校小程序记录
视频教程在我主页简介里 目录: 前言: 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言: 遇到一个学校小程序的站点,只在前端登录口做了校验,后端没有任何校验,奇葩弱口令离…...
正则表达式——参考视频B站《奇乐编程学院》
智能指针 一、背景🎈1.1. 模式匹配🎈1.2. 文本替换🎈1.3. 数据验证🎈1.4. 信息提取🎈1.5. 拆分字符串🎈1.6. 高级搜索功能 二、原料2.1 参考视频2.2 验证网址 三、用法3.1 限定符3.1.1 ?3.1.2 *3.1.3 3.1.…...
【Vue + Print.js】前端打印, 自定义字体大小, 自定义样式, 封装共享样式
在前端开发中,打印功能是一个常见的需求,尤其是在生成报表、打印用户资料或者导出文档时,通常需要通过前端代码进行打印。Print.js 是一个非常流行的 JavaScript 库,它提供了简单而强大的打印功能,允许你灵活控制打印内…...
python模拟练习第一期
问题一 如果一个数 p 是个质数,同时又是整数 a的约数,则 p 称为 a的一个质因数。 请问 2024 有多少个质因数? 步骤 1: 分解 2024 首先,2024 是偶数,说明可以被 2 整除。我们从 2 开始进行除法分解: 202…...
Java-25 深入浅出 Spring - 实现简易Ioc-01 Servlet介绍 基本代码编写
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
华硕奥创软件在线安装和离线安装方法
华硕奥创软件在线安装和离线安装方法 1. 华硕奥创软件介绍2. 华硕奥创软件在线安装2.1 第一种2.2 第二种 3. 华硕奥创软件离线安装3.1 概述3.2 华硕奥创软件离线包下载方式 4. 卸载华硕奥创软件4.1 概述4.2 华硕奥创卸载软件下载与使用方式 结束语 1. 华硕奥创软件介绍 华硕奥…...
AI监控赋能健身馆与游泳馆全方位守护,提升安全效率
一、AI视频监控技术的崛起 随着人工智能技术的不断发展,AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统,AI技术赋予监控系统实时分析、智能识别和精准预警的能力,让“被动监视”转变为“主动防控”。 二、AI监控应用…...
SQL Server数据库还原差异备份
适用范围:SQL Server 本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中还原差异数据库备份。 限制和局限 不允许在显式或隐式事务中使用 RESTORE。 无法在早期版本的 SQL Server 中还原较新版本的 SQL Server创建的备份。 在…...
Python 给 Excel 写入数据的四种方法
Python 在数据处理领域应用广泛,其中与 Excel 文件的交互是常见需求之一。 本文将介绍四种使用 Python 给 Excel 文件写入数据的方法,并结合生活中的例子进行解释,帮助新手小白快速上手。 1. 使用 openpyxl 库 openpyxl 是一个用于读写 Exc…...
实验14 RNN的记忆能力和梯度爆炸实验
一 循环神经网络的记忆能力 1.数据集构建 创建了一个DigitSumDataset 类,包括初始化函数init、数据生成函数 generate_data、数据加载函数 load_data、__len__ 方法、__getitem__ 方法。 init函数:接受的参数是data_path( 存放数据集的目录…...
【电子通识】电流倒灌为什么需要注意?
电流倒灌是一个很常见的问题,以“IO电流倒灌”为关键词在百度上进行搜索,可以找到很多相关案例。 电流倒灌问题在5V电平的单片机时代几乎不会发生,主要是因为5V单片的IO耐压值高,单片机内部结构对IO保护设计很好。 到了3.3V单片机时代,这类问题有一定的偶发性,但…...
Elasticsearch 集群部署
Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我…...
Windows系统VSCode 搭建ESP-IDF环境
VS Code,安装ESP-IDF插件 快捷键CTRLSHIFTP,弹出显示所有命令的窗口,选择ESP-IDF的欢迎 使用第一个选项,要选择一个ESP-IDF版本,选最新的就行 点击Install,等待下载 提示安装成功,如果过程中出现python已存…...
在centos 7.9上面安装mingw交叉编译工具
1.说明 为了在centos上面编译windows的程序,需要安装mingw工具,mingw工具是可以编译windows程序的一些工具链,使用方式和linux一致 2.下载脚本 使用脚本方式编译,github的脚本位置:https://github.com/Zeranoe/ming…...
【Java笔记】LinkedList 底层结构
一、LinkedList 的全面说明 LinkedList底层实现了双向链表和双端队列特点可以添加任意元素(元素可以重复),包括null线程不安全,没有实现同步 二、LinkedList 的底层操作机制 三、LinkedList的增删改查案例 public class LinkedListCRUD { public stati…...
【深入理解java中的设计模式】
深入理解java中的设计模式 设计模式是软件工程中的最佳实践,它们提供了解决特定问题的模板或蓝图。在Java中,设计模式通常被分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式 单例模式 (Singleton Pattern) 描述: 保证一个类…...
详解下c语言下的多维数组和指针数组
在实际c语言编程中,三维及以上数组我们使用的很少,二维数组我们使用得较多。说到数组,又不得关联到指针,因为他们两者的联系太紧密了。今天我们就详细介绍下c语言下的多维数组(主要是介绍二维数组)和指针。 一、二维数组 1.1&am…...
如何使用 Python 发送 HTTP 请求?
在Python中发送HTTP请求最常用的库是requests,它提供了简单易用的API来发送各种类型的HTTP请求。 除此之外,还有标准库中的http.client(以前叫做httplib)和urllib,但它们相对更底层,代码量较大,…...
活动预告 |【Part2】Microsoft Azure 在线技术公开课:基础知识
课程介绍 参加“Azure 在线技术公开课:基础知识”活动,培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动,扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 课…...
神经网络基础-激活函数
文章目录 1. 什么是激活函数2. sigmoid 激活函数3. tanh 激活函数4. ReLU 激活函数5. SoftMax 激活函数6. 其他常见的激活函数7. 激活函数的选择方法 1. 什么是激活函数 激活函数用于对每层的输出数据进行变换, 进而为整个网络注入了非线性因素。此时, 神经网络就可以拟合各种…...
Debedium如何忽略Oracle的purge命令
报错 截至目前3.0版本,Debezium的Oracle Connector并不支持purge table这个指令。 所以,在使用Debezium解析Oracle变更的时候,如果在源端执行了类似 purge table "$BIN… 的语句,就会导致Debezium罢工,日志里显…...
基于 webRTC Vue 的局域网 文件传输工具
文件传输工具,匿名加密,只需访问网页,即可连接到其他设备,基于 webRTC 和 Vue.js coturn TURN 服务器 docker pull coturn/coturn docker run -d --networkhost \-v $(pwd)/my.conf:/etc/coturn/turnserver.conf \coturn/coturn…...
opencv Canny边缘检测
canny阈值越高,检测到的边缘数量越少 # 导入OpenCV库,用于图像处理 import cv2 import numpy as np # 从matplotlib库中导入pyplot模块,用于绘制图像 from matplotlib import pyplot as plt # 创建一个名为window的窗口,窗口大小自…...
数仓高频面试 | 数仓为什么要分层
大家好,我是大D呀。 关于数仓分层,在面试过程中几乎是必问的。不过,面试官一般也不会直接考你数仓为什么要分层,而是在你介绍项目时,可能会换一种形式来穿插着问,比如数据链路为什么要这样设计,…...
Coconut:探索大语言模型的连续思维链推理能力
目录 简介: 什么是Coconut? 为什么我们需要Coconut? Coconut如何工作? 实验结果怎么样? Coconut的优势: 结论: 简介: 你有没有想过,计算机是如何像人类一样思考问…...
2024年安徽省职业院校技能大赛水利工程BIM建模与应用
2024年安徽省职业院校技能大赛 赛 项 规 程 赛项名称: 水利工程BIM建模与应用 赛项组别: 高职组 承办单位: 安徽水利水电职业技术学院 目录 一、赛项名称… 1 二、竞赛目标… 1 三、竞赛内容… 2 四、竞赛方式… 3 五、竞赛流程… 4 七、技术…...