【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点
🍀 写在前面
这篇5000多字博客也花了我几天的时间😂,主要是我对MySQL一部分重要知识点的理解【后面当然还会写博客补充噻,欢迎关注我哟】,当然这篇文章可能也会有不恰当的地方【毕竟也写了这么多字,错别字可能也不少😂】,不足的地方欢迎各位大佬的指正。
🏆ps:【文章最后有相关练习题的分享】
🏆:CSDN主页
🏆:博客园主页
🍀一、主键和外键知识点补充
✨1.1、 主键的概念
1、什么时候用主键?2、主键有什么用处 3、一张表可以设置几个主键?4、一个主键只能是一列吗?5、主键和唯一索引有什么区别?
1)每个表应该有一个主键 。 定义一个保证唯一标识每个logging的主键。
2)数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用与其他表的外键关联,以及文本记录的修改与删除。
3) 一张表只可以有一个主键
4)主键不一定只有一列,有些表的主键是多个属性构成的。表定义为列的集合
5)主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 1、主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 2、唯一性索引列允许空值,而主键列不允许为空值。 3、主键列在创建时,已经默认为空值 + 唯一索引了。 4、主键可以被其他表引用为外键,而唯一索引不能。
✨1.2、主键的创建
🎉1.2.1、创建一个主键
比如我们要创建一张名为 "tb1"的表并且将它的id列设置为主键
creat table tb1(id int not null auto_increment primary key, )
🎉1.2.2、创建多个主键
为“tb1”的表创建多个主键
creat table tb1(id int not null auto_increment ,pid int(11) not NULL,primary key(id, pid) )
🍀二、补充知识点
✨2.1、desc 表名;
desc tablenames 主要用来查看数据表的表结构
比如用以下命令创建了一张‘user’表
create table user( id int auto_increment primary key, name varchar(10), gender char(2) )engine=innodb default charset=utf8;
使用以上命令后可以得到如下结果:
✨2.2、show create table 表名;
该语句的功能:查看表创建时的定义
列如对上面的‘user’表执行该操作得到如下结果:
但是上面的结果看起来非常混乱,我们可以使用\G【\G 的作用是将查到的结构旋转90度变成纵向】使得结果更加美观
🍀三、自增列起始值设置
我们首先查看上面user表中的数据
不难看出这个表的id列已经自增到了5,其中show create table 表名;可以看出AUTO_INCREMENT=6,这个就表示接下来id列要递增成为的数字,
下一步我们使用delete from user;
语句来删除这个表接着我们使用
insert into user (name, gender) values('周周', '男');
再向表中插入一列会发现id列是从6开始递增
这时我们就会想,可不可以重新从1开始,或者自定义开始递增时的值呢?
✨3.1、设置自增列初始值语句
alter table user AUTO_INCREMENT=1;
要特别注意如果设置的初始值小于原来表递增列最后一个数据的值,那么语句是不会生效的
🍀四、自增列步长设置
✨4.1、步长设置语法
步长设置我就不举例了,上面是设置递增列的初始值,这个是步长【不设置默认是1】
语法:
set session auto_increment_increment=2; 设置会话步长 show session variables like 'auto_inc%'; 查看全局变量
但是要强调一点:
MySQL: 自增步长是基于会话级别的【登入一次mysql就是一次会话】,改变一次步长之后同一次会话创建的所有表的步长都会改变为你设置的步长;
SqlServer:自增步长:是基础表级别的:可以单独的对某一张表的步长进行设置,而不改变全局的步长;
总结:SqlServer方便一点
MySQL: 自增步长基于会话级别:show session variables like 'auto_inc%'; 查看全局变量set session auto_increment_increment=2; 设置会话步长# set session auto_increment_offset=10;基于全局级别(接下来开的所有会话的步长都会改变):show global variables like 'auto_inc%'; 查看全局变量set global auto_increment_increment=2; 设置会话步长# set global auto_increment_offset=10; 设置起始值SqlServer:自增步长:基础表级别:CREATE TABLE `t5` (`nid` int(11) NOT NULL AUTO_INCREMENT,`pid` int(11) NOT NULL,`num` int(11) DEFAULT NULL,PRIMARY KEY (`nid`,`pid`)) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8CREATE TABLE `t6` (`nid` int(11) NOT NULL AUTO_INCREMENT,`pid` int(11) NOT NULL,`num` int(11) DEFAULT NULL,PRIMARY KEY (`nid`,`pid`)) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8
🍀五、唯一索引知识点
✨5.1、什么是唯一索引?
所谓唯一索引,就是在创建索引时,限制索引的字段值必须是唯一的。通过该类型的索引可以比普通索引更快速地查询某条记录。唯一索引顾名思义不可以重复,但是可以为空,这也是它与主键的区别之一
✨5.3、创建唯一索引的方式
创建方法一:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
创建方法二【联合唯一索引】:
UNIQUE indexName (列名,列名),
在创建表时的例子:
create table t1(id int ....,num int,xx int,UNIQUE 唯一索引名称 (列名,列名),# 示例UNIQUE uql (num,xx),)
🍀六、外键变种详细知识点
✨6.1、什么是外键变种
顾名思义就是外键的多种形式,下面会通过举例子的方式讲述
✨6.2、外键变种之一对一
比如我们有两张表【用户表】 和【博客表】,如果每个用户只能注册一个博客,那么用户账号与博客账号的外键关系就是一对一
用户表:id name age 1 xaiom 23 2 eagon 343 lxxx 454 owen 83博客表:id url user_id (外键 + 唯一约束)1 /xiaom 22 /zekai 13 /lxxx 34 /owen 4
✨6.3、外键变种之多对多
这个也是比较容易理解的,就比如我有两张表【用户表】 和【主机表】,每个用户可以登入多台主机,同时每台主机也可以被多个用户同时使用,这种关系就是多对多
用户表:id name phone 1 root1 12342 root2 12353 root3 12364 root4 12375 root5 12386 root6 12397 root7 12408 root8 1241主机表:id hostname 1 c1.com 2 c2.com 3 c3.com 4 c4.com 5 c5.com 为了方便查询, 用户下面有多少台主机以及某一个主机上有多少个用户, 我们需要新建第三张表: 用户主机表:id userid hostid1 1 12 1 23 1 34 2 45 2 56 3 27 3 4 创建的时候, userid 和 hostid 必须是外键, 然后联合唯一索引 unique(userid, hostid),(避免重复出现)【联合唯一索引在多对多的情况下可以视情况而写】Django orm 也会设计
🍀七、数据行操作补充
✨7.1、增操作
向表的某一行插入数据
insert into 表名(列名1, 列名2) values('行一内容', '行一内容'), ('行二内容', '行二内容')
向表的多行插入数据
insert into 表名(列名1, 列名2) values('行一内容', '行一内容'), ('行二内容', '行二内容')
向某一张表中插入另一张表中的内容
insert into 表一(name,age) select name,age from 表二;
✨7.2、删操作
假设我创建了一张表叫【tb1】其中列名有【name】列和【id】列
# 删除表 delect from tb1 # 带条件的删除 # 把id不等于2的行删除 delete from tb1 where id !=2 delete from tb1 where id =2 delete from tb1 where id > 2 delete from tb1 where id >=2 # 把id > 2,并且name='alex'的数据行删除 delete from tb1 where id >=2 or name='alex'
✨7.3、改操作
同样的使用上面删操作的表
# 把tb1表中的id > 2,并且name='XX'的数据行,的名字设为'alex',其他的不变 update tb1 set name='alex' where id>12 and name='xx' update tb1 set name='alex',age=19 where id>12 and name='xx'
✨7.4、查操作
基础的查操作
# 查看表中所有数据 select * from tb1; # 查看表中id,name列的数据 select id,name from tb1;select id,name from tb1 where id > 10 or name ='xxx'; # 查看表中id,name列的数据,并将name列名重新取个叫cname的别名 select id,name as cname from tb1 where id > 10 or name ='xxx';select name,age,11 from tb1;
进阶的查操作
select * from tb1 where id != 1 # 查看id为(1,5,12)中的数的行 select * from tb1 where id in (1,5,12); select * from tb1 where id not in (1,5,12); # 查tb1表中值id为tb11中元素的行 select * from tb1 where id in (select id from tb11) # 查看id为5到12之间数的行 select * from tb1 where id between 5 and 12;
通配符的查操作
# 查询表中以ale开头的所有用户 %表示后面可以有任意多个字符,比如可以匹配到【alex,alexk】 select * from tb1 where name like "ale%" # 查询表中以ale开头的所有用户 _表示后面只能有一个字符,比如【alex】可以匹配到但是【alexxxx】就不可以匹配到 select * from tb1 where name like "ale_"
✨7.5、limit以及order by语句
将上面知识是先看下面的图:
在我们浏览器搜素想要的内容时,返回的结果通常是很多的,如果一次将结果全部显示给你,那么电脑可能会崩溃,这时浏览器就会默认返回结果的前几十条,这种对想要查询结果的条数的限制我们在数据库中也可以使用limit来实现🎉7.5.1、limit【限制】的用法
# 查看表中的前十条数据 select * from tb1 limit 10; # 从0行开始后面取十条数据 select * from tb1 limit 0,10; select * from tb1 limit 10,10; # 从20行开始后面取十条数据 select * from tb1 limit 20,10; # 从第20行开始读取,读取10行; select * from tb1 limit 10 offset 20;
🎉7.5.2、order by【排序语句】
# 将表tb1按id列从大到小排 select * from tb1 order by id desc; 大到小 【口诀先d后c,d在c后面所以是从大到小】 select * from tb1 order by id asc; 小到大 【口诀先a后c,c在a后面所以是从小到大】 # 将表tb1按age列从大到小排,如果id数值相同就按id列大小从小到大排 select * from tb1 order by age desc,id desc;
拓展要点:取后十条数据
# 实现原理:将tb1表逆序,然后在取前十条数据,这样就相当于取了原表的最后十条数据 select * from tb1 order by id desc limit 10;
🍀八、MySQL分组操作知识点
关键语句:
group by
首先我们按如下的方式创建两张表【department表】【userinfo表】
department表CREATE table department(id int auto_increment primary key,title varchar(32))engine=innodb default charset=utf8;userinfo表CREATE table userinfo(id int auto_increment primary key,name varchar(32),age int,depart_id int,CONSTRAINT fk_usrt_depart FOREIGN key (depart_id) REFERENCES department(id))engine=innodb default charset=utf8;# 给两张表加数据# department表 +----+-------+ | id | title | +----+-------+ | 1 | 财务 | | 2 | 公关 | | 3 | 测试 | | 4 | 运维 | +----+-------+# userinfo表 +----+------+------+-----------+ | id | name | age | depart_id | +----+------+------+-----------+ | 1 | 小费 | 6 | 1 | | 2 | 小港 | 6 | 3 | | 3 | 小干 | 6 | 2 | | 4 | 小刚 | 6 | 4 | | 5 | 小强 | 6 | 4 | | 6 | 小美 | 6 | 4 | | 7 | 小亮 | 6 | 2 | | 8 | 小每 | 6 | 1 | +----+------+------+-----------+
对于语句我就不多解释了,主要看结果就可以了
1、将同一个部门的人放在一起,并且用户部门相同取id值大的用户
SELECT depart_id, max(id) FROM userinfo GROUP BY depart_id;
输出结果:
2、在上面操作的基础上显示各个部门的人数select count(id),max(id),depart_id from userinfo group by depart_id;
输出结果:
3、如果对于聚合函数结果进行二次筛选时?必须使用havingselect count(id),depart_id from userinfo group by depart_id having count(id) > 1;
4、上面的列名为count(id),这是看着有点不舒服的,我们可以使用as关键字改名
5、进一步的进阶方式select count(id),depart_id from userinfo where id > 4 group by depart_id having count(id) > 1;
🍀九、MySQL连表操作
✨9.1、连表操作概念
连表顾名思义就是将两张表连在一起查看的操作,操作大的分为两种内连接和外连接,而外连接又分为左连接、右连接和全连接。
内连接(inner join):只包含匹配的记录。
外连接(outer join):除了包含匹配的记录还包含不匹配的记录。{
1. 左连接(left join):返回匹配的记录,以及表 A 多余的记录。
2. 右连接(right join):返回匹配的记录,以及表 B 多余的记录。
3. 全连接(full join):返回匹配的记录,以及表 A 和表 B 各自的多余记录。
}
用网上一张图比较好的图可以更加方便理解如下:
下面我们都用【department表】【user_mess表】来举例:# department表 +----+-------+ | id | title | +----+-------+ | 1 | 财务 | | 2 | 公关 | | 3 | 测试 | | 4 | 运维 | +----+-------+# user_mess表 +----+------+-----------+ | id | name | depart_id | +----+------+-----------+ | 1 | 小费 | 1 | | 2 | 小港 | 1 | | 3 | 小干 | 2 | | 4 | 小刚 | 4 | +----+------+-----------+
执行如下语句可以连接两张表:
select * from user_mess,department where user_mess.depart_id = department.id; 输出结果: +----+------+-----------+----+-------+ | id | name | depart_id | id | title | +----+------+-----------+----+-------+ | 1 | 小费 | 1 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | 4 | 小刚 | 4 | 4 | 运维 | +----+------+-----------+----+-------+ 4 rows in set (0.00 sec)
✨9.2、内连接
内连接 语法: a inner join b ,但是一般 inner 可以省略不写,也就是如下形式
select * from a join b ;
执行下面语句:
select * from user_mess join department; 输出结果: +----+------+-----------+----+-------+ | id | name | depart_id | id | title | +----+------+-----------+----+-------+ | 4 | 小刚 | 4 | 1 | 财务 | | 3 | 小干 | 2 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 1 | 小费 | 1 | 1 | 财务 | | 4 | 小刚 | 4 | 2 | 公关 | | 3 | 小干 | 2 | 2 | 公关 | | 2 | 小港 | 1 | 2 | 公关 | | 1 | 小费 | 1 | 2 | 公关 | | 4 | 小刚 | 4 | 3 | 测试 | | 3 | 小干 | 2 | 3 | 测试 | | 2 | 小港 | 1 | 3 | 测试 | | 1 | 小费 | 1 | 3 | 测试 | | 4 | 小刚 | 4 | 4 | 运维 | | 3 | 小干 | 2 | 4 | 运维 | | 2 | 小港 | 1 | 4 | 运维 | | 1 | 小费 | 1 | 4 | 运维 | +----+------+-----------+----+-------+
说明:像这样不加查询条件会形成 笛卡尔积 。笛卡尔积的意思是:是指包含两个集合中任意取出两个元素构成的组合的集合。// 两表分别交叉查询了一遍;也可以加上条件查询条件 on 或者 using ,两者的区别在于 都是查询出符合条件的结果集 ,但是using会优化掉相同的字段。
下面来举个栗子更好理解:
# 使用on语句添加条件 select * from user_mess join department on user_mess.depart_id = department.id; 输出结果: +----+------+-----------+----+-------+ | id | name | depart_id | id | title | +----+------+-----------+----+-------+ | 1 | 小费 | 1 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | 4 | 小刚 | 4 | 4 | 运维 | +----+------+-----------+----+-------+ 4 rows in set (0.00 sec)
这时我们可以发现这与上面的
select * from user_mess,department where user_mess.depart_id = department.id;
语句输出结果是相同的
✨9.3、外连接
🎉9.3.1、左连接
语法:
# 左连接既 左边 tb_left 表作为基表(主表)显示所有行, tb_right 表作为外表 条件匹配上的就显示,没匹配上的就用 Null 填充 select * from tb_left left join tb_right on tb_left.id = tb_left.id ;
栗子:
select * from user_mess left join department on user_mess.depart_id = department.id;输出结果: +----+------+-----------+------+-------+ | id | name | depart_id | id | title | +----+------+-----------+------+-------+ | 1 | 小费 | 1 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | 4 | 小刚 | 4 | 4 | 运维 | +----+------+-----------+------+-------+ 4 rows in set (0.00 sec)
🎉9.3.1、右连接
语法:
# 右连接即 右边 tb_right 表作为基表(主表)显示所有行, tb_left 表作为外表 条件匹配上的就显示,没匹配上的就用 Null 填充; 和左连接相反。 select * from tb_left right join tb_right on tb_left.id = tb_left.id ;
栗子:
select * from user_mess right join department on user_mess.depart_id = department.id; 输出结果:+------+------+-----------+----+-------+ | id | name | depart_id | id | title | +------+------+-----------+----+-------+ | 2 | 小港 | 1 | 1 | 财务 | | 1 | 小费 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | NULL | NULL | NULL | 3 | 测试 | | 4 | 小刚 | 4 | 4 | 运维 | +------+------+-----------+----+-------+ 5 rows in set (0.00 sec)
🎉9.3.1、全外连接
语法:
# 经查找发现 MySQL 是不支持所谓 tb_left full join tb_right 语作为 全外连接查询的,想要实现全外连接查询可以通过 union 实现,union 操作符用于合并两个或多个 SELECT 语句的结果集,语句如下:select * from tb_left left join tb_right on tb_left.id = tb_right.id union select * from tb_left right join tb_right on tb_left.id = tb_right.id ;
栗子:
select * from user_mess left join department on user_mess.depart_id = department.id union select * from user_mess right join department on user_mess.depart_id = department.id;输出结果:+------+------+-----------+------+-------+ | id | name | depart_id | id | title | +------+------+-----------+------+-------+ | 1 | 小费 | 1 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | 4 | 小刚 | 4 | 4 | 运维 | | NULL | NULL | NULL | 3 | 测试 | +------+------+-----------+------+-------+ 5 rows in set (0.00 sec)
值得注意的是:注:当 union 和 all 一起使用时(即 union all ),重复的行不会去除。
栗子:
select * from user_mess left join department on user_mess.depart_id = department.id union all select * from user_mess right join department on user_mess.depart_id = department.id;输出结果:+------+------+-----------+------+-------+ | id | name | depart_id | id | title | +------+------+-----------+------+-------+ | 1 | 小费 | 1 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | 4 | 小刚 | 4 | 4 | 运维 | | 2 | 小港 | 1 | 1 | 财务 | | 1 | 小费 | 1 | 1 | 财务 | | 3 | 小干 | 2 | 2 | 公关 | | NULL | NULL | NULL | 3 | 测试 | | 4 | 小刚 | 4 | 4 | 运维 | +------+------+-----------+------+-------+ 9 rows in set (0.00 sec)
✨9.4、交叉连接
概念:
交错连接 语法:tb1 cross join tb2 ;交错连接可以加查询条件,也可以不加查询条件,如果不加查询条件会形成 笛卡尔积,类似内连接效果,同样可以使用 using 语句优化字段。
栗子:
select * from user_mess cross join department;输出结果: +----+------+-----------+----+-------+ | id | name | depart_id | id | title | +----+------+-----------+----+-------+ | 4 | 小刚 | 4 | 1 | 财务 | | 3 | 小干 | 2 | 1 | 财务 | | 2 | 小港 | 1 | 1 | 财务 | | 1 | 小费 | 1 | 1 | 财务 | | 4 | 小刚 | 4 | 2 | 公关 | | 3 | 小干 | 2 | 2 | 公关 | | 2 | 小港 | 1 | 2 | 公关 | | 1 | 小费 | 1 | 2 | 公关 | | 4 | 小刚 | 4 | 3 | 测试 | | 3 | 小干 | 2 | 3 | 测试 | | 2 | 小港 | 1 | 3 | 测试 | | 1 | 小费 | 1 | 3 | 测试 | | 4 | 小刚 | 4 | 4 | 运维 | | 3 | 小干 | 2 | 4 | 运维 | | 2 | 小港 | 1 | 4 | 运维 | | 1 | 小费 | 1 | 4 | 运维 | +----+------+-----------+----+-------+ 16 rows in set (0.00 sec)
✨9.5、总结各种连表操作
1、内连接和交叉连接是十分相似的,只是语句语法有所不同,但最后查询出来的结果集的效果都是一样的,添加条件查询就只查询匹配条件的行,不添加条件查询则形成 笛卡尔积(生成重复多行) 而降低效率。
2、左连接以左边表为基础表 显示所有行 ,右边表条件匹配的行显示,不匹配的则有 Null 代替。
3、右连接以右边表为基础表 显示所有行 ,左边表条件匹配的行显示,不匹配的则有 Null 代替。
🍀十、小结
恭喜你看到了最后,现在看了这么多,不如赶快网上找些题目自己动手实践一波撒😁。
不知道在哪找?放心我帮你找好了👀。
👉 【MySQL练习题】复制链接打开阿里云盘就行了:https://www.aliyundrive.com/s/D24NKjfNpTW
相关文章:

【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点
🍀 写在前面 这篇5000多字博客也花了我几天的时间😂,主要是我对MySQL一部分重要知识点的理解【后面当然还会写博客补充噻,欢迎关注我哟】,当然这篇文章可能也会有不恰当的地方【毕竟也写了这么多字,错别字可…...

并发编程——synchronized优化原理
如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:耶瞳空间 一:基本概念 使用synchronized实现线程同步,即加锁,实现的是悲观锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同…...
LeetCode 剑指 Offer II 083. 没有重复元素集合的全排列
给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 1 < nums.length < 6 -10 < nu…...
JSONObject与JSONArray使用区别
目录 1.使用的场景区别 2. 使用方法区别 3.获取方式不同 4. 解析JSON字符串 5.总结 1.使用的场景区别 想通过键值对的形式获取数据,使用JSONObject。如果后台查询的是某个bean的list集合向前端页面传递,使用JSONArray。 2. 使用方法区别 创建方法不…...
经典C程序例程:通过进程ID得到文件名
通过进程ID得到文件名 #include <stdio.h> #include <windows.h> #include <tlhelp32.h> #include <tchar.h>BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName); void DispProcess(void); void DispPrsFile(void);// typedef BOOL (_stdcall *E…...

【Java】Spring MVC程序开发
文章目录Spring MVC程序开发1. 什么是Spring MVC?1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC?3. 怎么学习Spring MVC?3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…...
leetcode题解-704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…...
2.2 C语言程序的错误条件
在C语言程序中,条件语句决定程序的执行路径,因此条件表达式是程序的关键。 应用最经典的程序,除法的减法实现程序,解释条件表达式的重要性。x=y*q+r,x是被除数,y是除数,q是商,r是余数。 程序的方法, x=(r-y)+y*(1+q)。 main(){ /*错误条件的程序*/ r:=x; q:=0; whil…...

laravel 邮件发送
配置 Laravel 的邮件服务可以通过 config/mail.php 配置文件进行配置。 邮件中的每一项都在配置文件中有单独的配置项,甚至是独有的「传输方式」,允许你的应用使用不同的邮件服务发送邮件 mailers > [smtp > [transport > smtp,host > env(M…...
高性能 Jsonpath 框架,Snack3 3.2.57 发布
Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。 强调文档…...

Android---进程间通信机制3
1 服务如何注册到 SM 中 getIServiceManager().addService(name, service, false); getIServiceManger --- new ServiceManagerProxy(new BinderProxy()) BinderInternal.getContextObject --- 返回 BinderProxy 对象 ProcessState::self()->getContextObject: 创建一个 BpB…...

Python实战,爬取金融期货数据
大家好,我是毕加锁。 今天给大家带来的是 Python实战,爬取金融期货数据 文末送书! 文末送书! 文末送书! 任务简介 首先,客户原需求是获取https://hq.smm.cn/copper网站上的价格数据(注:获取的是…...

Allegro如何导入第三方网表操作指导
Allegro如何导入第三方网表操作指导 在用Allegro做PCB设计的时候,除了支持第一方网表的导入,同样也是可以导入第三方网表的,第三方网表如下图 如何导入,具体操作如下 点击Setup点击User Preference...

高码率QPSK调制解调方案(FPGA实现篇)
在前面的章节中,已经讲过QPSK调制的方案和Matlab算法仿真,在本篇中,主要讲解基于FPGA的高速QPSK调制的实现。根据前面提到的技术指标,本系统传输的数据速率为500Mbps,中频为720MHz,因此,传统的串行QPSK调制已经不合适在FPGA中实现,需采用全数字的并行方式进行调制,具体…...
Elasticsearch的RESTful Api使用
Elasticsearch的RESTful Api使用 文章目录Elasticsearch的RESTful Api使用查询集群健康情况查看所有索引其他的_cat命令创建索引删除索引修改索引查看索引创建文档批量操作文档删除文档查询文档全量更新文档局部更新文档索引的搜索分词分析分数说明查询类型分析查询集群健康情况…...
软著申请需要注意的
一、文档格式 (1)程序源代码和说明文档,源码前后30页,文档前后30页。 (2)软件源代码和说明书的页眉必须标明软件名称、版本号和页码,应当与申请表中相应内容完全一致 (3)…...
SpringBoot入门 - 添加Logback日志
SpringBoot开发中如何选用日志框架呢? 出于性能等原因,Logback 目前是springboot应用日志的标配; 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式。日志框架的基础在学习这块时需要一些日志框架的发展和基础,同时了…...
社会实践报告
中文摘要: 注重素质教育的今天,社会实践活动一直被视为高校培养德、智、体、美、劳全面发展的跨 世纪优秀人才的重要途径。团期社会实践活动是学校教育向课堂外的一种延伸,也是推进素质教育进程的重 手段。它有助于当代大学生接触社会,了解社…...

LeetCode 460. LFU 缓存 -- 哈希查询+双向链表
LFU 缓存 困难 634 相关企业 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 int get(int key) - 如果键 key 存在于缓存中,则获取键…...
Dubbo 源码分析 – SPI 机制
1.简介 SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口 加载实现类。正因此特性࿰…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...