JAVA开发中常用RDMS

一、前言

JAVA的开发离不开数据库的支持,常见的有关系型数据库和非关系型数据库。java除了处理不依赖与数据库的通信技术。很多的java项目或者应用程序都需要建立在数据库的基础上。所以java开发早已经不是单纯的java开发,更多的是基于对数据的处理,比如对数据的增删查改等操作。常见的数据库包括mysql 、oracle、postgreSql、达梦、serverSQL等。这类数据库成为关系型数据库,它们的逻辑存储模型为二维表的集合。还有一些非关系型数据库,它们是相对关系型数据库而言的,如:HBASE、mongodb、es、redis等。它们的逻辑存储结构模型是键值,或者文档的形式存储。本章内容总结Java开发中RDMS的一些使用。

二、以mysql为例介绍RDMS

mysql是常用的关系型数据库,它是数据二维表的集合。

从应用的角度,我们要使用mysql数据库,首先就是需要安装mysql数据库,这里略过。那么我们就需要有一个登录数据库的用户名和密码。然后我们登录上数据库,建立一个库名,我们假定它为test-db,

CREATE DATABASE 数据库名;

我们就可以在库里建表,比如建表t_user

CREATE TABLE table_name (column_name column_type);

这就是关系数据库

三、mysql语法大全

1.创建数据库
代码如下(示例):

create database 数据库名;

2.显示所有数据库
代码如下(示例):

show databases;

3.选择数据库
代码如下(示例):

use 数据库名;

4.删除数据库
代码如下(示例):(此操作不可逆,谨慎操作)

drop database 数据库名;

5.创建数据表
代码如下(示例):

create table 数据表名(字段,字段,字段);

6.插入数据
代码如下(示例):

insert into 数据表名(字段,字段,字段) values (值,值,值);
insert into 数据表名 value(值,值,值);
insert into 数据表名 value(值,值,值,值,值,值,值,值,值);/*插入多行*/

7.修改数据
代码如下(示例):

update 表名 set 字段名=值 where 条件;

8.将数据表中某一字段所有值修改为指定值
代码如下(示例):

update 表名 set 字段名=值;

9.删除某条数据
代码如下(示例):

delete from 表名 where 条件;

10.查询
代码如下(示例):

select 字段或* from 数据表名 where 条件;

11.表中增加一列
代码如下(示例):

alter table 数据表名 add clumn 要加的字段名 字段类型(长度) not null;/*不为空操作*/

12.修改某一列
代码如下(示例):

alert table 数据表名 modify 列名 字段类型(长度);

13.删除某一列
代码如下(示例):

alter table 数据表名 drop 列名;

14.删除一个表
代码如下(示例):

delete from 数据表名;
drop table 数据表名;
truncate table 数据表名;

a:delete可以删除一个表的所有数据,也可后面跟where条件,删除部分数据;

b:drop会删除表的结构和所有数据;

c:truncate会删除一个表的所有数据。
注意:delete删除的数据可以事物可以回滚;drop会删除表结构及其中的所有数据,谨慎使用;truncate删除的数据事物不可回滚,谨慎使用。

15.模糊查询
代码如下(示例):

select 字段或* from 数据表名 where 字段名 like '%值%';

16.排序
代码如下(示例):

SELECT 字段或* from 数据表名 WHERE 条件 ORDER BY `id` DESC;

以id为准倒序排列,ASC是默认排序,DESC是倒序排列

17.分页查询
代码如下(示例):

select 字段或* from 数据表名 where 条件 order by 'id' desc limit 0,5;/*从0行起,每页5行数据*/
--limit 子句  (限制查询结果数量)--limit  offset,length   语法解析: offset是指偏移量,默认为0; length是指需要显示的记录数.--分页示例说明: $page = 3; //第三页$pageSize = 10; //页面显示10条记录$offset = ($page - 1) * $pageSize; //偏移量为20limit $offset,$pageSize //实现分页 偏移20,显示10
例如:select * from student where score >60 order by score,name desc limit 1,3;--查询score大于80,排序score升序和name降序,偏移量为1,显示3条记录

18.连接数据库与退出
代码如下(示例):

/*连接mysql*/
mysql -h 地址 -P 端口 -u 用户名 -p 密码
例如: mysql -h 127.0.0.1 -P 3306 -u root -p ****/*退出mysql*/
exit;

19.修改字段排序
代码如下(示例):

/*关键字:first 修改字段排序,把某个字段放在最前面*/
alter table 表名 modify 字段名 字段类型 [字段选项] first;
例如: alter table test modify name varchar(100) not null default 'admin' comment '最前面' first;/*关键字:after 修改字段排序,字段名1放在字段名2的后面*/
alter table 表名 modify 字段名1 字段类型 [字段选项] after 字段名2;
例如: alter table test modify name varchar(100) not null default 'admin' comment 'time字段后面' after time;

20.修改字段类型
代码如下(示例):

/*关键字:modify 修改字段类型*/
alter table 表名 modify 字段名 新的字段类型 [新的字段选项];
例如: alter table test modify name varchar(100) not null default 'admin' comment '修改后名字';

21.重命名
代码如下(示例):

/*关键字:change 重命名字段*/
alter table 表名 change 原字段名 新字段名 新的字段类型 [新的字段选项];
例如: alter table test change name username varchar(50) not null default '' comment '用户名字';

22.修改表选项
代码如下(示例):

/*修改表选项*/ 
alter table 表名 表选项信息;
例如: alter table test engine Myisam default charset gbk; --修改存储引擎和修改表的字符集

23.mysql数据类型
代码如下(示例):

#MySQL数据类型
/*MySQL三大数据类型:数值型、字符串型和日期时间型*/

24.mysql属性
代码如下(示例):

#MySQL列属性
/*null、not null、default、primary key、auto_increment、comment*/
MySQL真正约束字段的是数据类型,但是数据类型的约束太单一,需要有一些额外的约束,来更加保证数据的合法性.
MySQL常用列属性有:null、not null、default、primary key、auto_increment、comment./*空属性: null和not null*/
空属性: null(空,默认) 和 not null(不为空). mysql数据库默认字段都是为null的,实际开发过程中尽可能保证所有的数据都不应该为null,空数据没有意义.
例如: create table test(a int not null,b int
);
insert into test (a,b) values(10,null);
insert into test (a,b) values(null,10);--报错

25.默认值
代码如下(示例):

/*默认值: default*/
default: 自定义默认值属性,通常配合not null一起使用.
例如: create table test1(a int not null default 200,b int
);
insert into test1(b) values(20);--或 insert into test1(a,b) values(default,20);

26.主键
代码如下(示例):

/*主键|唯一索引*/
Mysql中提供了多种索引? (下文索引更多解析)
1.主键索引:primary key
2.唯一索引:unique key
3.全文索引:fulltext index
4.普通索引:key 或 index主键:primary key  一张表中只能有一个字段可以使用对应的主键,用来唯一的约束该字段里面的数据,不能重复和不能为null.
设置主键有两种方式:
(1)在定义一个字段的时候直接在后面进行设置primary key
例如: create table test2(id int(10) unsigned not null primary key,name char(20) not null default ''
);
(2)定义完字段后再定义主键
例如: create table test3(id int(10) unsigned not null,name char(20) not null default '',primary key (id)
);
唯一键:unique key 解决表中多个字段需要唯一性约束的问题.
例如:create table test4(id int(10) unsigned not null,name char(20) not null default '',goods varchar(100) not null default '',primary key (id),unique key (name,goods)
);

26.自增长
代码如下(示例):

/*自动增长: auto_increment*/
自增长属性:每次插入记录的时候,自动的为某个字段的值加1(基于上一个记录). 通常跟主键搭配.
自增长规则:(1)任何一个字段要做自增长前提必须是一个索引  (2)自增长字段必须是整型数字
例如: create table test5(id int(10) unsigned not null auto_increment,name char(20) not null default '',primary key (id)
);

27.列描述
代码如下(示例):

/*列描述 comment*/
列描述(注释):comment 与其他的注释符不同之处在于,这里的注释内容属于列定义的一部分.
例如:create table user(id int(10) unsigned not null auto_increment comment 'id',name char(20) not null default '' comment '名字',primary key (id)
)engine=InnoDB default charset=utf8 comment='用户表';

28.索引
代码如下(示例):

#索引
/*索引的概述和优缺点和种类*/
什么是索引?
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.
类比理解:数据库中的索引相当于书籍目录一样,能加快数据库的查询速度.
没有索引的情况,数据库会遍历全部数据后选择符合条件的选项.
创建相应的索引,数据库会直接在索引中查找符合条件的选项.索引的性质分类:
索引分为聚集索引和非聚集索引两种,聚集索引是索引中键值的逻辑顺序决定了表中相应行的物理顺序,而非聚集索引是不一样;
聚集索引能提高多行检索的速度,而非聚集索引对于单行的检索很快.索引的优点:
(1)加快数据检索速度 (创建索引主要原因)
(2)创建唯一性索引,保证数据库表中每一行数据的唯一性
(3)加速表和表之间的连接
(4)使用分组和排序子句对数据检索时,减少检索时间
(5)使用索引在查询的过程中,使用优化隐藏器,提高系统的性能索引的缺点:
(1)创建索引和维护索引要耗费时间,时间随着数据量的增加而增加
(2)索引需要占用物理空间和数据空间
(3)表中的数据操作插入、删除、修改, 维护数据速度下降索引种类
(1)普通索引: 仅加速查询
(2)唯一索引: 加速查询 + 列值唯一(可以有null)
(3)主键索引: 加速查询 + 列值唯一(不可以有null)+ 表中只有一个
(4)组合索引: 多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
(5)全文索引: 对文本的内容进行分词,进行搜索 (注意:目前仅有MyISAM引擎支持)/*创建表时直接指定索引*/
--创建主键索引
例如:create table student(id int(10) unsigned not null auto_increment comment 'id主键索引',name char(20) not null default '' comment '名字',class varchar(50) not null default '' comment '班级',seat_number smallint(5) not null default 0 comment '座位编号',primary key (id)
)engine=InnoDB default charset=utf8 comment='学生表';
/*创建索引*/
create [unique唯一索引][clustered聚集索引] index <索引名>
on <表名>(<列名称>[<排序>],<列名称>[<排序>]…);语法解析:其中unique和clustered为可选项. 注意:基本表上最多仅仅能建立一个聚集索引.
"列名称":规定需要索引的列. "排序":可选asc(升序)和desc(降序)缺省值为asc.
--创建唯一索引(unique key 简写 unique)
例如:create unique index number on student(seat_number desc);
--创建普通索引
例如:create index name_class on student(name asc,class desc);
/*删除索引*/
drop index <索引名> on 表名;
例如:drop index number on student;

29.外键
代码如下(示例):

/*外键约束: foreign key */
外键约束: foreign key 被约束的表叫做副表,外键设置在副表上面,外键引用主键字段所在的表叫做主表. (作用:约束两张表的数据)
外键定义语法: constraint 外键约束名称 foreign key(外键字段) references 主表名称(引用字段)
外键数据操作:
1.当有外键约束之后,添加数据的时候,先添加主表数据,再添加副表数据
2.当有了外键约束,修改数据的时候,先改副表的数据,在修改主表的数据
3.当有了外键约束,删除数据的时候,也是先删除副表的数据,再删除主表的数据
外键注意事项:
1.外键约束只有InnoDB存储引擎才支持.
2.实际项目中往往会用到外键的设计思想,但往往不会真正的从语法上进行外键约束. 因为外键约束的级联操作可能会带来一些现实的逻辑问题. 另外使用外键会较低mysql的效率.

30.储存引擎
代码如下(示例):

/*储存引擎: engine*/
常见的引擎:Myisam InnoDB BDB Memory Archive 等不同的引擎在保存表的结构和数据时采用不同的方式?
MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引
InnoDB表文件含义:.frm表定义,表数据空间文件(存放表的数据和索引)和日志文件

31.MySQL中innodb与myisam的区别
代码如下(示例):

MySQL中innodb与myisam的区别
(1):InnoDB支持事物,MyISAM不支持事物
(2):InnoDB支持行级锁,MyISAM支持表级锁
(3):InnoDB支持快照数据(MVCC),MyISAM不支持
(4):InnoDB支持外键,MyISAM不支持
(5):InnoDB不支持全文索引,MyISAM支持innodb使用的是行级锁:只有在增删改查时匹配的条件字段带有索引时,innodb才会使用行级锁.(行级锁:要为匹配条件字段加索引)
innodb使用的是表级锁:如果增删改查时匹配的条件字段不带有索引时,innodb使用的将是表级锁.(表级锁:数据库全表查询,需要将整张表加锁,保证查询匹配的正确性)
触发读锁:就是用select命令时触发读锁.
触发写锁:就是在你使用update,delete,insert时触发写锁,并且使用rollback或commit后解除本次锁定
更好的区分:读写锁和表级锁行级锁. 将读写锁叫做权限锁(决定了加锁后用户有哪些操作权限),将表级锁行级锁叫做对象锁(决定将锁加在某一行还是整张表)MVCC多版本并发控制,也可称之为一致性非锁定读;它通过行的多版本控制方式来读取当前执行时间数据库中的行数据. 实质上使用的是快照数据.
为什么要使用MVCC?
消除锁的开销. (如果要保证数据的一致性,最简单的方式就是对操作数据进行加锁,但是加锁不可避免的会有锁开销. 所以使用MVCC能避免进行加锁的方式并提高并发.)

32.三范式
代码如下(示例):

/*数据库三范式*/
--建表规范
- 每个表保存一个实体信息
- 每个具有一个ID字段作为主键
- ID主键 + 原子表--第一范式
字段不能再分,确保每列保持原子性.--第二范式
满足第一范式的基础上,不能有部分依赖.
消除符合组合主键(A,B)就可以避免部分依赖. 增加单列关键字.--第三范式
满足第二范式的基础上,不能有传递依赖.
某个字段依赖于主键,而有其他字段依赖于该字段. 这就是传递依赖.
将一个实体信息的数据放在一个表内实现

33.比较运算符和逻辑运算符
代码如下(示例):

--比较运算符(常用示例)<, >, <=, >=, =, !=或<>, IS NULLbetween and | not between and --例如: between A and B; 相当于区间[A,B].in | not in --例如:in表示某个值出现; not in表示没出现在一个集合之中.is null | is not null --空值查询like --通配符;  _  :代表任意的单个字符;  % :代表任意的字符--逻辑运算符&&(AND), ||(OR), !(NOT), XOR异或

34.group by
代码如下(示例):

--group by子句 (分组)--group by 字段/别名 [排序方式]    分组后排序: asc 升序(默认),desc 降序--统计函数需配合group by使用:count 返回不同的非NULL统计值  count(*)、count(字段)sum 求和; max 求最大值; min 求最小值; avg 求平均值
select class, sum(score) as sum from student group by class desc;--查询各个班级总成绩,分组班级降序.
select id,class, max(score) as max from student where score>80  group by class;--查询各个班级最高成绩,分数要大于80,分组班级升序.

35.having
代码如下(示例):

--having 子句 (条件查询)--where功能、用法相同,执行时机不同.--本质区别:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选.--where不可以使用统计函数. 一般需用统计函数配合group by才会用到having例如:select class, min(score) as min from student where min(score)>80 group by class;--报错
select class, min(score) as min from student group by class having min(score)>80;--查询各个班级最低成绩,分组班级,最低分数大于80

36.order by
代码如下(示例):

--order by子句  (排序)--order by 字段1[asc|desc],字段n[asc|desc]--排序: asc 升序(默认),desc 降序
例如:insert into student(name,score,class) values('xiaohu',95,'A');--插入相同班级相同分数,要求多字段排序?
select * from student where score >80 order by score,name desc;--查询score大于80,排序score升序和name降序

37.联合查询
代码如下(示例):

/*联合查询 关键字:union*/ 
--联合查询:就是将多个查询结果进行纵向上的拼接. (select语句2的查询结果放在select语句1查询结果的后面)
--语法:select语句1union [all | distinct]select 语句2union [all | distinct]select 语句n例如:查询A班级最高成绩和B班级最低成绩? 
(select name, class,score from student where class='A' order by score desc limit 1)
union
(select name, class,score from student where class='B' order by score limit 1);

38.连接查询
代码如下(示例):

/*连接查询*/将多个表的字段进行连接,可以指定连接条件.
--交叉连接 cross join
select  *|字段列表 from 表名1 cross join 表名2;一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录包含两个表的所有的字段.
结果上看,就是对两张表做笛卡尔积,有n1*n2条记录.
例如:select * from student cross join score;

39.内连接
代码如下(示例):

--内连接 inner join
select *|字段列表 from 左表 [inner] join 右表 on 左表.字段 = 右表.字段 [五子句];数据在左表中存在,同时在右表中又有对应的匹配的结果才会被保存. 如果没有匹配上,数据没有意义不会保存.
通常就是两张表中存在相同的某个字段.(项目中通常是关联主键ID) using() 用法连接两表公共字段. 例如:using(ID)
select student.*, teacher.class as t_class, teacher.name as t_name from student join teacher on student.class = teacher.class;

40.外连接
代码如下(示例):

--外连接外 outer join
如果数据不存在,也会出现在连接结果中.-- 左外连接 left joinselect *|字段列表 from 左表 left [outer] join 右表 on 左表.字段 = 右表.字段 [五子句];如果数据不存在,左表记录会出现,而右表为null填充例如:select student.*, teacher.class as t_class, teacher.name as t_name from student left join teacher on student.class = teacher.class;

41.右连接
代码如下(示例):

-- 右外连接 right joinselect *|字段列表 from 右表 right [outer] join 左表 on 右表.字段 = 左表.字段 [五子句];如果数据不存在,右表记录会出现,而左表为null填充
--自然连接 natural join
自动判断连接条件完成连接.--自然内连接 natural inner joinselect *|字段列表 from 左表 natural [inner] join 右表;自然内连接其实就是内连接,这里的匹配条件是由系统自动指定.--自然外连接 natural outer join自然外连接分为自然左外连接和自然右外连接.匹配条件也是由系统自动指定.--自然左外连接 natural left joinselect *|字段列表 from 左表 natural left [outer] join 右表;--自然右外连接 natural right joinselect *|字段列表 from 右表 natural right [outer] join 左表;

注意:项目中使用最多是内连接和外连接.

42.子查询
代码如下(示例):

/*子查询*/
子查询(内查询)在主查询(外查询)之前一次执行完成,子查询的结果被主查询使用.
使用子查询需用括号包裹.
select * from student where score=(select max(score) as max from student);--查询班级最高成绩学生的记录根据子查询返回值的形式:
1.单一值: 返回单行单列的子查询,也叫标量子查询.
例如:select max(score) as max from student;

43.exists
代码如下(示例):

--exists
--主要作用就是判断后面的select语句有没有查询到数据.结果为true有返回数据,否则就是false.
例如:select exists (select * from student where name ='uzi');--有

44.视图
代码如下(示例):

/*视图*/
视图是一张虚拟表,它表示一张表的部分数据和多张表的综合数据,视图的结构和数据都是建立在基表上.
视图仅仅是一个表结构,视图的数据并不在数据库中存储,数据保存在基表中. 一张表可以创建多个视图.
-- 视图作用
简化业务逻辑,对客户端隐藏真实的表结构--创建视图
create [algorithm = undefined | merge | temptable] view 视图名称 [(字段列表)]
as
sql语句语法解析:
1.视图名必须唯一,同时不能与表重名.
2.指定视图执行的算法,通过algorithm指定.
3.merge: 合并算法,将视图的语句和外层的语句合并后再执行.
4.temptable: 临时表算法,将视图执行的结果生成一张临时表,再执行外层语句.
5.undefined: 未定义型,用哪种算法有MySQL决定,默认算法merge.
6."字段列表"如果存在,数目必须等于select语句检索的列数例如:create view v_student (v_name,v_score)
as
select name,score from student where score >80;--查看结构
show create view 视图名称--删除视图
drop view [if exists] 视图名称
注意: 删除视图后,数据库中的数据依然存在.(对当前视图删除)--修改视图结构 
alter view 视图名称 [(字段列表)]
as
sql语句

45.事物
代码如下(示例):

/*事物*/
事物:是并发控制的基本单位.事务就是一系列的操作,这些操作要么都执行,要么都不执行.(事务中可以保存多个SQL语句. 这些SQL语句是一个整体. 要么都执行,要么都不执行.)--事务操作--开启事务start transaction; 或者 begin;--提交事务commit;--回滚事务rollback;--group by子句 (分组)--group by 字段/别名 [排序方式]    分组后排序: asc 升序(默认),desc 降序--统计函数需配合group by使用:count 返回不同的非NULL统计值  count(*)、count(字段)sum 求和; max 求最大值; min 求最小值; avg 求平均值start transaction;--开启事物insert into goods(goods_name,price) values('milk','43');
insert into goods(goods_name,price) values('bread','15');commit;--提交事物begin;--开启事物insert into goods(goods_name,price) values('book','99');rollback;--回滚事物

– 事务的特性

原子性: 事务是一个不可分割的工作单位,事务中的操作要么都执行,要么都不执行.
一致性: 事务前后数据的完整性必须保持一致. (事务开始和结束时,外部数据一致. 在整个事务过程中,操作是连续的.)
隔离性: 多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离.
持久性: 一个事务一旦被提交,它对数据库中的数据改变就是永久性的.
– 事务的原理
利用InnoDB的自动提交(autocommit)特性完成. 普通的Mysql执行语句后,当前的数据提交操作均可被其它客户端可见.
事务是暂时关闭“自动提交”机制,需要commit提交持久化数据操作.

注意: 修改事务自动提交 set autocommit = 0 | 1 (0:取消自动提交;1:自动提交)--设置为不自动提交,因为Mysql默认自动提交执行

46.用户权限管理
代码如下(示例):

/*用户权限管理*/
用户信息表:mysql数据库的下, user表中
--创建用户
create user 用户名[@主机地址] identified by '密码';例如:create user 'user_one'@'localhost' identified by '1234';--创建一个只能本机访问的用户
create user 'user_two'@'192.168.1.204.%' identified by '1234';--创建一个可以局域网访问的用户
create user 'user_three' identified by '1234';--创建一个可全网访问的用户
select host,user,password from user;--查看user表,host用户名和密码--重命名用户
rename user 老用户名[@老主机地址] to 新用户名[@新主机地址];-- 设置密码
set password = password('修改密码'); -- 为当前用户设置密码
set password for 用户名 = password('修改密码'); -- 为指定用户设置密码
例如:set password for 'user_three' = password('123456789'); -- 指定'user_three'用户设置密码-- 删除用户
drop user 用户名[@主机地址];
例如:drop user 'user_two'@'192.168.1.204.%';--分配权限给用户
grant 权限列表 on  *|库名 . *|表名  to 用户名[@主机地址] [identified by "用户密码"] [with grant option];语法解析:
权限列表: all [privileges]: 表示所有权限; delete:允许使用delete; select:允许使用select; update:允许使用update; insert:允许使用insert 等...*.* :表示所有库的所有表
库名.表名 :表示某库下面的某表
例如: grant update,insert on *.* to user_one@'localhost' identified by "1234" with grant option;--刷新权限
flush privileges;--查看权限
show grants for 用户名[@主机地址];  
show grants for 'user_one'@'localhost';--查看当前用户权限
show grants;--撤消权限
revoke 权限列表 on *|库名 . *|表名 from 用户名[@主机地址];
revoke all privileges, grant option from 用户名[@主机地址];-- 撤销所有权限
例如:revoke update on *.* from 'user_one'@'localhost';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文教你如何快速备考云计算HCIE 3.0 !

大家好&#xff0c;在誉天实验辅导老师的耐心帮助下&#xff0c;本人在9月21日的云计算HCIE 3.0考试已顺利通过&#xff0c;很高兴有这个机会给大家分享备考的经历&#xff0c;希望对还在备考的同学能有一定的帮助。 备考准备 在云计算HCIE3.0的课程学习结束之后&#xff0c;就…

一款构建Python命令行应用的开源库

1 简介 当我们编写 Python 程序时&#xff0c;我们经常需要与用户进行交互&#xff0c;接收输入并输出结果。Python 提供了许多方法来实现这一点&#xff0c;其中一个非常方便的方法是使用 typer 库。typer 是一个用于构建命令行应用程序的 Python 库&#xff0c;它使得创建命令…

使用MATLAB进行傅里叶变换

1、定义 T1;% 周期0-1 N20;% 最大谐波 k-N:N;% -20:20——-20表示a_(20)e^(j*20*w0*t) N1length(k);%N141 % ceil(N1/2)21%即21是N1的中位数tlinspace(0,T,100); Ntlength(t); ttlinspace(-4*T,4*T,1024); Nttlength(tt);2、原函数 w02*pi/T; % 0-T xt(t>T/4).* 1.0; fig…

嵌入式学习笔记(49)由I2C学通信时序

10.2.1什么是时序&#xff1f; 字面意思&#xff0c;时序就是时间顺序&#xff0c;实际上在通信中时序就是通信线上按照时间顺序发生的电平变化&#xff0c;以及这些变化对通信的意义就叫时序。 10.2.2 I2C总线空闲状态、起始位、结束位 (1)I2C总线上有1个主设备&#xff0c…

二叉树的顺序存储——堆——初识堆排序

前面我们学过可以把完全二叉树存入到顺序表中&#xff0c;然后利用完全二叉树的情缘关系&#xff0c;就可以通过数组下标来联系。 但是并不是把二叉树存入到数组中就是堆了&#xff0c;要看原原来的二叉树是否满足&#xff1a;所有的父都小于等于子&#xff0c;或者所有的父都…

2023年铷铁硼行业分析:低端供应过剩,高性能材料供应不足[图]

铷铁硼材料是一种Fe基磁性材料&#xff0c;主要由钕铁硼按一定比例组成的四方晶体结构&#xff0c;其中Fe元素约占总质量的三分之二&#xff0c;Nd元素约占总量的三分之一&#xff0c;而B等含量最少&#xff0c;约占1%。铷铁硼是现今磁性最强的永久磁铁&#xff0c;也是最常使用…

记录vue开发实例

封装的表格组件 <template><div><div style"width: 100%" v-if"showList"><el-table v-loading.lock"loading" :data"dataList":header-cell-style"{background: #F2FCFE,fontSize: 14px,color: #50606D}&…

sed 命令

sed是Stream Editor&#xff08;字符流编辑器&#xff09;的缩写&#xff0c;简称流编辑器。 sed 命令是一个面向行处理的工具&#xff0c;它以“行”为处理单位&#xff0c;针对每一行进行处理&#xff0c;处理后的结果会输出到标准输出stdout。sed 命令是很懂礼貌的一个命令&…

【微服务】七. http客户端Feign

7.1 基于Feign远程调用 RestTimeplate方式调用存在的问题 先来看以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user"order.getUserId(); User user restTemplate.getForObject(url,User.class);存在下面的问题&#xf…

世界前沿技术发展报告2023《世界信息技术发展报告》(六)网络与通信技术

&#xff08;六&#xff09;网络与通信技术 1. 概述2. 5G与光通讯2.1 美国研究人员利用电磁拓扑绝缘体使5G频谱带宽翻倍2.2 日本东京工业大学推出可接入5G网络的高频收发器2.3 美国得克萨斯农工大学通过波束管理改进5G毫米波通信2.4 联发科完成全球首次5G NTN卫星手机连线测试2…

SpringBoot, EventListener事件监听的使用

1、背景 在开发工作中&#xff0c;会遇到一种场景&#xff0c;做完某一件事情以后&#xff0c;需要广播一些消息或者通知&#xff0c;告诉其他的模块进行一些事件处理&#xff0c;一般来说&#xff0c;可以一个一个发送请求去通知&#xff0c;但是有一种更好的方式&#xff0c;…

【WinRAR】去除请购买WinRAR许可

新建rarreg.key文件 在WinRAR安装目录新建rarreg.key文件&#xff0c;文件内容如下: RAR registration datawncnUnlimited Company LicenseUID1b064ef8b57de3ae9b5264122122509b52e35fd885373b214a4a64cc2fc1284b77ed14fa2066ebfca6509f9813b32960fce6cb5ffde62890079861be57…

Win11右键恢复Win10老版本

Win11右键恢复Win10老版本 最近自己更新了windows11的OS,整体感觉都是不错的,但是就是每次右键菜单我都要再次点击下展开更多选项,这对追求极简主义的我,就是不爽, 手动恢复win10操作吧! 第一种:创建文件(简单快速) 1.新建一个resoreRightKey.reg文件,并在里面填入如下代码 W…

【系统架构】软件架构的演化和维护

导读&#xff1a;本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …

Python接口自动化测试 —— Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; …

延迟队列

KEYS命令和SCAN命令都可以用于在Redis中查找匹配指定模式的键名&#xff0c;但它们之间有以下区别&#xff1a; 1. 阻塞 vs 非阻塞&#xff1a;KEYS命令是一个阻塞操作&#xff0c;它会遍历整个键空间来查找与给定模式匹配的键名。在执行KEYS命令期间&#xff0c;Redis服务器会…

Gitlab+Jenkins自动化部署,解放双手

项目打包 ​ 在部署项目前需要对源码进行打包&#xff0c;一个简单的SpringBoot项目默认是打包为jar包&#xff0c;也就是在pom.xml中的<packaging>jar</packaging>方式&#xff0c;当然也会有一些打包成war包方式&#xff0c;使用外置的Tomcat应用服务器部署war包…

【Redis】基础数据结构-quicklist

Redis List 在Redis3.2版之前&#xff0c;Redis使用压缩列表和双向链表作为List的底层实现。当元素个数比较少并且元素长度比较小时&#xff0c;Redis使用压缩列表实现&#xff0c;否则Redis使用双向链表实现。 ziplist存在问题 不能保存过多的元素&#xff0c;否则查找复杂度…

ArcGIS Engine:报错无法嵌入互操作类型“ESRI.ArcGIS.Geometry.EnvelopeClass”。请改用适用的接口。

此错误是由于尝试直接实例化ArcGIS COM组件的某些互操作类引起的。这在.NET Framework 4及更高版本中是不被推荐的。 为了解决此问题&#xff0c;你需要确保在工程的引用中将ArcGIS的互操作类型设置为“不嵌入”。 按照以下步骤操作&#xff1a; 在解决方案资源管理器中找到…

Python实现JavaScript中AES加密有关填充问题

1. 先展示一下JS端的格式&#xff08;没找到没混淆的。。。&#xff0c;将就看吧&#xff09; 2. 在python加密中是没有选择填充模式的&#xff0c;需要自己来填充 3. 对加密不懂的朋友可能跟我一样刚开始很懵逼&#xff0c;因为遇到的基本都是pksc7填充模式&#xff0c;但是网…