Day10 Liunx高级系统设计11-数据库2

DQL:数据查询语言

查询全表

select * from 表名;

查询指定列

select 列名 1, 列名 2,… from 表名 ;

条件查询

select * from 表名 where 条件 ;
注意:
条件查询就是在查询时给出 WHERE 子句,在 WHERE 子句中可以使用如下运算符及关键
字:
= != <> < <= > >=
BETWEEN…AND ( 等价 <= >=)
IN(set) ( 包含 )
IS NULL ( 非空 )
AND ( 逻辑与 )
OR ( 逻辑或 )
NOT ( 逻辑非 )
XOR ( 逻辑异或 )
示例
-- 查询成绩小于80的学员
select * from stu where score < 80;
-- 查询成绩等于100的学员
select * from stu where score = 100;
-- 查询成绩在85~100的学员
select * from stu where math between 80 and 100;
-- 查询姓名叫做“张三”或者“李四”的所有学生信息。
select * from stu where name beteween "张三" and "李四";
-- 查询成绩不小于80的学员
select * from stu where not score < 80;
-- 查询姓名不叫做“张三”或者“李四”的所有学生信息。
select * from stu where name not beteween "张三" and "李四";
-- 查询姓名叫做“张三”或者“李四”的所有学生信息。
select * from stu where name in ("张三","李四");
-- 查询成绩小于0或大于100的学员
select * from stu where score < 0 or score > 100;
-- 查询性别为空的学员
select * from stu where sex IS NULL;

模糊查询

语法
当想查询姓名中包含 a 字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字
LIKE
_: 任意一个字母
%: 任意 0~n 个字母 ' %'
示例
-- 查找姓名为3个字母的学生信息
select * from stu where name like '___';//注意是3个_,表示匹配3个字符
-- 查找以字母b开头的学生信息
select * from stu where name like 'b%';
正则表达式
MySQL 同样也支持其他正则表达式的匹配, MySQL 中使用 REGEXP 操作符来进行正则
表达式匹配。
示例
-- 查找姓名以 l 开头且以 y 结尾的学生信息
select * from stu where name regexp '^l' and name regexp 'y$' ;        

去重

关键字 :distinct
示例
-- 查询 stu 表中 age 字段,剔除重复行
select distinct age from stu;

计算列

对从数据表中查询的记录的列进行一定的运算之后显示出来
+,-,*,/,%
示例
-- 出生年份 = 当前年份 - 年龄
select stu_name, 2021 -stu_age from stus;

别名

如果在连接查询的多张表中存在相同名字的字段,我们可以使用 表名 . 字段名 来进行区
分,如果表名或字段名太长则不便于 SQL 语句的编写,我们可以使用数据表别名
示例
-- 字段起别名
select name AS 姓名 from stu;
-- 表名起别名
select s.name,s.sex from stu AS s;
-- AS可以省略
select name 姓名 from stu;
select s.name,s.sex from stu s;

排序order by

将查询到的满足条件的记录按照指定的列的值升序 / 降序排列
语法:
select * from 表名 where 条件 order by 列名 asc|desc;
order by 列名 表示将查询结果按照指定的列排序
        asc 按照指定的列升序(默认)
        desc 按照指定的列降序
示例:
# 单字段排序
select * from stu where age>15 order by score desc;
# 多字段排序:先满足第一个排序规则,当第一个排序的列的值相同时再按照第二个列的
规则排序
select * from stus where age>15 order by score asc,age desc;

聚合函数

聚合函数是用来做纵向运算的函数:
COUNT() :统计指定列不为 NULL 的记录行数;
MAX() :计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN() :计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM() :计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0
AVG() :计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0
示例
-- 统计年龄大于20的学员人数
select count(*) as cnt from stu where age>20;
-- 统计学员的总年龄
select sum(age) from stu;
-- 统计学员的平均年龄以及总年龄
select sum(age),avg(age) from stu;
-- 统计学员的最低年龄以及最高年龄
select max(age),min(age) from stu;
-- 计算班级平均分
select avg(score) from stu;

分组查询

分组:就是将数据表中的记录按指定的列进行分组
语法
select 分组字段/聚合函数
from 表名
[where 条件]
group by 分组列名 [having 条件]
[order by 排序字段]
注意
语句执行顺序:
1, 先根据 where 条件从数据库查询记录
2,group by 对查询记录进行分组
3, 执行 having 对分组后的数据进行筛选
4, 排序
示例
-- 先对查询的学生信息按性别进行分组(分成了男、女两组),然后再分别统计每组
学生的个数
select stu_gender,count(stu_num) from stus group by stu_gender;
-- 先对查询的学生信息按性别进行分组(分成了男、女两组),然后再计算每组的平
均年龄
select stu_gender,avg(stu_age) from stus group by stu_gender;
-- 先对学生按年龄进行分组,然后统计各组的学生数量,还可以对最终的结果排序
select stu_age,count(stu_num) from stus group by stu_age order by
stu_age;
-- 查询所有学生,按年龄进行分组,然后分别统计每组的人数,再筛选当前组人数>1
的组,再按年龄升序显示出来
select stu_age,count(stu_num)
from stus
group by stu_age
having count(stu_num)>1
order by stu_age;
-- 查询性别为'男'的学生,按年龄进行分组,然后分别统计每组的人数,再筛选当前组人
数>1的组,再按年龄升序显示出来
select stu_age,count(stu_num)
-> from stus
-> where stu_gender='男'
-> group by stu_age
-> having count(stu_num)>1
-> order by stu_age;

分页查询

语法
select 查询的字段
from 表名
where 条件
limit param1,param2;
注意 :
- param1 :表示获取查询语句的结果中的第一条数据的索引(索引从 0 开始)
- param2 :表示获取的查询记录的条数(如果剩下的数据条数 <param2 ,则返回剩下的
所有记录)
注意
-- 示例
-- 假如 : 对数据表中的学生信息进行分页显示,总共有 10 条数据,我们每页显示 3
-- 总记录数: `count 10`
-- 每页显示: `pageSize 3`
-- 总页数: `pageCount=count%pageSize==0?
count/pageSize:count/pageSize+1`
-- 查询第一页:
select * from stus [ where ...] limit 0 , 3 ; ( 1 - 1 )* 3
-- 查询第二页:
select * from stus [ where ...] limit 3 , 3 ; ( 2 - 1 )* 3
-- 查询第三页:
select * from stus [ where ...] limit 6 , 3 ; ( 3 - 1 )* 3
-- 查询第四页:
select * from stus [ where ...] limit 9 , 3 ; ( 4 - 1 )* 3
-- 如果在一张数据表中:
-- pageNum 表示查询的页码
-- pageSize 表示每页显示的条数
-- 通用分页语句如下:
select * from stus [ where ...] limit (pageNum- 1 )*pageSize,pageSize;

约束

概念

在创建数据表的时候,指定的对数据表的列的数据限制性的要求(对表的列中的数据进行
限制)

作用

- 保证数据的有效性
- 保证数据的完整性
- 保证数据的正确性

分类

- 非空约束( not null ):限制此列的值必须提供,不能为 null
- 唯一约束( unique ):在表中的多条数据,此列的值不能重复
- 主键约束( primary key ):非空 + 唯一,能够唯一标识数据表中的一条数据
- 自增长约束 (auto_increment): 每次 +1, 1
- 检查约束( check ):保证列中的值满足某一条件
- 默认约束( default ):保存数据时 , 未指定值则采用默认值
- 外键约束( foreign key ):建立不同表之间的关联关系

非空约束

含义 : 限制数据表中此列的值必须提供
例子 : 创建图书表 , 设置书名 (book_name) 的不能为空
create table books(
        book_isbn integer ,
        book_isbn char ( 4 ),
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 )
);

唯一约束

含义 : 在表中的多条数据,此列的值不能重复
例子 : 创建图书表 , 设置国籍标准书号 (book_isbn) 的不能重复
create table books(
        book_id integer ,
        book_isbn char ( 4 ) unique ,
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 )
);

检查约束

含义 : 保证列中的值满足某一条件
例子 : 创建用户表时 , 检查年龄在 0~200
方式 1: 创建表时
create table users(
u_id integer ,
u_name varchar ( 30 ),
u_sex char ( 10 ),
u_age int ,
check (u_age >= 0 and u_age <= 200 )
);
注意 :CHECK 子句会被分析,但是会被忽略。
原因 :CREATE TABLE 语法:接受这些子句但又忽略子句的原因是为了提高兼容性,以便更
容易地从其它 SQL 服务器中导入代码,并运行应用程序,创建带参考数据的表。
解决方案 : 枚举或触发器

默认约束

含义 : 保存数据时 , 未指定值则采用默认值
例子 : 创建图书表 , 设置封面地址默认为 xxx
create table books(
book_id integer ,
book_isbn char ( 4 ) unique ,
book_name varchar ( 10 ) not null ,
book_author varchar ( 6 ),
book_img varchar ( 100 ) default 'xxx'
);

主键约束

概念
就是数据表中记录的唯一标识,在一张表中只能有一个主键(主键可以是一个列,也可以
是多个列的组合)
含义 :
当一个字段声明为主键之后,添加数据时:
此字段数据不能为 null
此字段数据不能重复
例子 : 创建图书表 , 设置书籍 id(book_id)
create table books(
        book_id integer primary key ,
        book_isbn char ( 4 ) unique ,
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 )
);
create table books(
        book_id integer ,
        book_isbn char ( 4 ) unique ,
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 ),
        primary key (book_id)
);
删除数据表主键约束
# 语法 :alter table 表名 drop primary key;
# :
alter table books drop primary key ;
创建表之后添加主键约束
# 语法 :alter table 表名 modify 字段名 数据类型 primary key;
# :
alter table books modify book_id integer primary key ;

自增长

在我们创建一张数据表时,如果数据表中有列可以作为主键(例如:学生表的学号、图书
表的 isbn )我们可以直接这是这个列为主键;
当有些数据表中没有合适的列作为主键时,我们可以额外定义一个与记录本身无关的列
ID )作为主键,此列数据无具体的含义主要用于标识一条记录,在 mysql 中我们可以将此
列定义为 int ,同时设置为 自动增长 ,当我们向数据表中新增一条记录时,无需提供 ID 列的
值,它会自动生成
定义 int 类型字段自动增长: auto_increment
例子
create table types(
        type_id int primary key auto_increment ,
        type_name varchar ( 20 ) not null ,
        type_remark varchar ( 100 )
);
注意:自动增长从 1 开始,每添加一条记录,自动的增长的列会自定 +1 ,当我们把某条记录
删除之后再添加数据,自动增长的数据也不会重复生成(自动增长只保证唯一性、不保证
连续性)

多表查询

语法: select 列名 1, 列名 2,.. from 1, 2,.. where 判断语句 ;
示例
-- 查看 stu grade 表中的学生学号、姓名、班级、成绩信息
select s.*,g.* from stu s,grade g where s .id = g .stu_id ;
注意
没有条件会出现笛卡尔积

视图:虚拟表

概念

视图,就是由数据库中一张表或者多张表根据特定的条件查询出得数据构造成得虚拟表

优点

安全性:
        如果我们直接将数据表授权给用户操作,那么用户可以CRUD 数据表中所有数据,加
入我们想要对数据表中的部分数据进行保护,可以将公开的数据生成视图,授权用户访
问视图;用户通过查询视图可以获取数据表中公开的数据,从而达到将数据表中的部分
数据对用户隐藏。
简单性:
        如果我们需要查询的数据来源于多张数据表,可以使用多表连接查询来实现;我们
通过视图将这些连表查询的结果对用户开放,用户则可以直接通过查询视图获取多表数
据,操作更便捷。
数据独立:
        一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没
有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

创建视图

CREATE VIEW 视图名称 AS <SELECT语句>

示例

create view view_test1
AS
select * from students

查询视图结构

语法

DESC 视图名称;

示例:

desc view_test1;

修改视图

语法

create OR REPLACE view 视图名称
AS 查询语句
#
alter view 视图名称
AS 查询语句
示例
# 方式1
create OR REPLACE view view_test1
AS
select * from students where stu_gender='女';
# 方式2
alter view view_test1
AS
select * from students where stu_gender='男';

特性

视图是虚拟表,查询视图的数据是来源于数据表的。当对视图进行操作时,对原数据表中的数据是否由影响呢?
查询操作 :如果在数据表中添加了新的数据,而且这个数据满足创建视图时查询语句的条件,通过查询视图也可以查询出新增的数据;当删除原表中满足查询条件的数据时,也会从视图中删除。
新增数据: 如果在视图中添加数据,数据会被添加到原数据表
删除数据: 如果从视图删除数据,数据也将从原表中删除
修改操作: 如果通过修改数据,则也将修改原数据表中的数据
视图的使用建议 : 对复杂查询简化操作,并且不会对数据进行修改的情况下可以使用视图。

触发器

概念

触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行调用
        1、只有每当执行 delete insert update 操作时,才会触发,并执行指定的一条或多条SQL 语句。
        例如:
                可以设置触发器,当删除persons表中 lucy 的信息时,自动删除 grade 表中与lucy相关的信息
        2、触发器常用于保证数据一致,以及每当更新或删除表时,将记录写入日志表

创建触发器

语法:
-- 语法 :
-- 修改 sql 语句结束符为 ||
delimiter ||
-- 创建触发器
create trigger 触发器名 [after|before] [ delete |update|insert] on 表名
for each row
begin
语句 ;
end ||
delimiter ;
old: 老数据
new: 新数据
示例
-- 删除 stu 表中的数据 , 同时删除 grade 表中 stu_id 相同的数据

查看触发器

语法:
show triggers;

删除触发器

drop trigger 触发器名;

c语言操作MySQL

API

注意
1, 需要安装 mysql 相关库 , 安装命令如下
Ubuntu16/18: sudo apt-get install libmysqld-dev
Ubuntu20: sudo apt-get install libmysqlclient-dev
2, 编译时需要加 mysqlclient
gcc 源文件名 .c -l mysqlclient

初始化

所需头文件
#include <mysql/mysql.h>
函数 :
MYSQL *mysql_init(MYSQL *mysql)
描述:
分配或初始化与 mysql_real_connect() 相适应的 MYSQL 对象
参数:
mysql:MYSQL* 句柄
返回值:
初始化的 MYSQL* 句柄。如果无足够内存以分配新的对象,返回 NULL

设置编码

函数 :
int mysql_set_character_set(MYSQL *mysql, const char *csname);
参数 :
mysql:MYSQL* 句柄
csname: 编码格式
:
mysql_set_character_set(&mysql,"utf8");

获取连接

所需头文件
        #include <mysql/mysql.h>
函数 :
        MYSQL *mysql_real_connect(MYSQL *mysql,
                const char *host,
                const char *user,
                const char *passwd,
                const char *db,
                unsigned int port,
                const char *unix_socket,
                unsigned long client_flag);
描述 :
        mysql_real_connect()尝试与运行在主机上的 MySQL 数据库引擎建立连接。
参数 :
        mysql:MySQL句柄
        host:“host”的值必须是主机名或 IP 地址 . 如果 “host” NULL 或字符串"localhost" ”127.0.0.1” ,连接将被视为与本地主机的连接 .
        user:MySQL登录的用户名
        passwd: MySQL登录的密码
        db:数据库名称
        port:MySQL服务器监听客户端连接到来的端口号(默认: 3306
        unix_socket:如果 unix_socket 不是 NULL ,该字符串描述了应使用的套接字或命名管道(默认为NULL)
        client_flag: 通常为 0 ,可以更改其值,以允许特定功能(详情见手册)
返回值:
        如果连接成功,返回MYSQL* 连接句柄。返回值与第 1 个参数的值相同。
        如果连接失败,返回NULL

执行SQL语句

无操作结果 : 如建库 , 建表 , 增加 , 删除 , 修改等语句
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        int mysql_real_query(MYSQL *mysql,const char * query,unsigned long length)
描述 :
        执行由“query” 指向的 SQL 查询 , 它应是字符串长度字节 “long”. 正常情况下 , 字符串必须包含1 SQL 语句 , 而且不应为语句添加终结分号( ‘;’ )或 “\g”. 如果允许多语句执行, 字符串可包含由分号隔开的多条语句 .
参数 :
        mysql:MySQL句柄
        query:需要执行的 MySQL 语句
        length:需要执行的 MySQL 语句的长度
返回值 :
        如果查询成功,返回0
        如果查询失败,返回非0
有操作结果 : 如查询语句
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        MYSQL_RES *mysql_store_result(MYSQL *mysql)
描述:
        对于成功检索了数据的每个查询(SELECT SHOW DESCRIBE EXPLAIN CHECK
TABLE 等),必须调 用 mysql_store_result() mysql_use_result() 。 对于其他查询,不需要调用mysql_store_result() mysql_use_result() ,但是如果在任何情况下均调用 mysql_store_result() ,它也不会导致任何伤害或性能降低。通过检查mysql_store_result() 是否返回 0 ,可检测查询 是否没有结果集(以后会更多)
参数 :
        Mysql:MySQL句柄
返回值 :
        成功 返回具有多个结果的MYSQL_RES 结果集合。
        失败 返回NULL

查询结果集

获取结果集中的列数
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        unsigned int mysql_num_fields(MYSQL_RES *result)
描述 :
        返回结果集中的列数
参数 :
        result:MYSQL_RES结果集句柄
返回值 :
        表示结果集中行数的无符号整数
获取结果集中的行数
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        my_ulonglong mysql_num_rows(MYSQL_RES *result)
描述 :
        返回结果集中的行数
参数 :
        result:MYSQL_RES结果集句柄
返回值 :
        结果集中的行数
获取结果集中的列名称
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result)
描述 :
        返回采用MYSQL_FIELD 结构的结果集的列。重复调用该函数,以检索关于结果集中所有列的信息。未剩余字段时,mysql_fetch_field() 返回 NULL
参数 :
        result:MYSQL_RES结果集句柄
返回值 :
        当前列的MYSQL_FIELD 结构。如果未剩余任何列,返回 NULL
获取结果集中的每行的数据(重要)
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
描述 :
        检索结果集的下一行。在mysql_store_result() 之后使用时,如果没有要检索的行,mysql_fetch_row() 返回 NULL
参数 :
        MYSQL_RES结果集句柄
返回值 :
        下一行的MYSQL_ROW 结构。如果没有更多要检索的行或出现了错误,返回 NULL

释放资源

释放结果集

所需头文件 :
        #include <mysql/mysql.h>
函数 :
        void mysql_free_result(MYSQL_RES *result)
描述 :
        释放由mysql_store_result() mysql_use_result() mysql_list_dbs() 等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result() 释放结果集使用的内存
参数 :
        MYSQL_RES结果集句柄
返回值 :
        无

释放MySQL句柄

所需头文件 :
        #include <mysql/mysql.h>
函数 :
        void mysql_close(MYSQL *mysql)
描述 :
        关闭前面打开的连接。如果句柄是由mysql_init() mysql_connect() 自动分配的,mysql_close() 还将解除分配由 mysql 指向的连接句柄
参数 :
        MySQL连接句柄
返回值 :
        无
示例DML
#include <stdio.h>
#include <mysql/mysql.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    MYSQL mysql;
    mysql_init(&mysql);
    mysql_set_character_set(&mysql,"UTF8");
    MYSQL *tag  = mysql_real_connect(
        &mysql,
        "10.12.152.71",
        "root",
        "027027",
        "mtdata",
        3306,
        NULL,
        0
    );
    if(tag == NULL)
    {
        printf("连接失败\n");
        return 0;
    }
    else{
        printf("连接成功\n");
    }
    //执行sql语句
char *sql_str = "select *from user";
mysql_query(&mysql,sql_str);
MYSQL_RES *res = mysql_store_result(&mysql);
if(res == NULL)
{
    printf("为空\n");
    return 0;
}
int column = mysql_num_fields(res);
int row = mysql_num_rows(res);
for(int i = 0;i < row;i++)
{
    MYSQL_ROW row_data= mysql_fetch_row(res);

    for(int j=0;j < column;j++)
    {
        printf("%s\t",row_data[j]);
    }
    printf("\n");
}
mysql_free_result(res);
    return 0;
}

示例DQL

#include <stdio.h>
#include <mysql/mysql.h>
int main(int argc, char const *argv[])
{
    /*
    总结步骤:执行dql的步骤
        1,定义MYSQL结构体变量
        2,初始化MYSQL结构体变量 mysql_init
        3,设置编码格式:mysql_set_character_set
        4,打开mysql连接:mysql_real_connect
        5,执行sql语句:mysql_query
        6,获取查找的结果集
        7,通过步骤5的返回值,获取查询到的数据
            mysql_num_rows:获取结果集中的行数
            mysql_num_fields:获取结果集中的列数
            mysql_fetch_field:获取列名
            mysql_fetch_row:获取每一行的数据
        8,关闭结果集:mysql_free_result
        9,关闭连接:mysql_close
    */
    MYSQL mysql;
    mysql_init(&mysql);
    mysql_set_character_set(&mysql,"utf8");
    MYSQL *tag  =  mysql_real_connect(
        &mysql,
        "10.12.152.71",
        "root",
        "027027",
        "mtdata",
        3306,
        NULL,
        0
    );
    if(tag == NULL)
    {
        printf("连接失败\n");
    }
    else
    printf("连接成功\n");

    char sql[] = "select * from user";
    mysql_query(&mysql,sql);
    MYSQL_RES *res = mysql_store_result(&mysql);

    int row = mysql_num_rows(res);
    printf("row = %d\n",row);
    int lie = mysql_num_fields(res);
    printf("lie = %d\n",lie);

    for (int i = 0; i < row; i++)
    {
        //获取一行的数据
        MYSQL_ROW r = mysql_fetch_row(res);
        for (int j = 0; j < lie; j++)
        {
            char * str = r[j];
            printf("%s\t",str);
        }
        printf("\n");
    }
    mysql_free_result(res);
    mysql_close(&mysql);
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

某行 webpack 加密算法分析

本次的目标是某行购物网站的加密算法分析&#xff0c;网站如下 aHR0cHM6Ly93d3cuemtoLmNvbS8&#xff08;注&#xff1a;该网站从整体上看来&#xff0c;是webpack加密&#xff0c;但是本文的实现方式&#xff0c;不是扣js代码也不补环境&#xff0c;因为最后分析此网站用的都…

把文化注入品牌,五粮液荣获“全国企业文化优秀成果特等奖”

执笔 | 萧 萧 编辑 | 扬 灵 12月15日&#xff0c;以“塑造优秀企业文化&#xff0c;凝聚企业发展力量”为主题的全国企业文化年会(2023&#xff09;首次在长江首城、中国酒都、中国动力电池之都宜宾盛大举行。 凭借“弘扬和美文化&#xff0c;谱写高质量发展新篇章”成果…

基于FPGA的HDMI编码模块设计(包含工程源文件)

前文已经通过FPGA实现了TMDS视频编码的算法&#xff0c;也对单沿数据采样转双沿数据采样的ODDR原语做了详细讲解和仿真验证&#xff0c;本文将这些模块结合&#xff0c;设计出HDMI编码模块&#xff0c;在HDMI接口的显示器上显示一张图片。 1、整体思路 如图1所示&#xff0c;是…

云计算:FusionCompute 通过 FreeNAS 添加SAN存储

目录 一、实验 1.环境准备 2.FusionCompute添加CNA 3.在存储中创建LUN资源映射给CNA节点 3.添加存储资源关联CNA主机节点 4.扫描存储资源 5.将存储设备添加为数据存储 二、问题 1.FusionCompute中存储如何分类 2.存储资源与存储设备有何区别 3.FusionCompute支持哪些…

一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下再反弹,求它在第10次落地时共经过多少米,第10次反弹多高。

代码如下: 结果为: #include<stdio.h> int main() { double x 100.0, y0.0; for (int i 1; i < 10; i) { y x; x / 2; y x; } y - x; printf("第十次落地时共经过%lf米\n第十次反弹%lf米", y, x); return 0; }

Linux集群实用脚本

现有三台虚拟机&#xff0c;例如&#xff1a;node2、node3、node4 三台虚拟机配置了免密登录&#xff0c;安装了hadoop等软件。 相关集群实用脚本命令 统一执行jps命令 jpsall #!/bin/bash ​ for host in node2 node3 node4 doecho $host ssh $host jps done ​ 统一执行命…

华为组播配置案例

igmp-snooping主要用于生成二层组播表项&#xff0c;防止交换机全部接口都发组播报文 PC端配置&#xff1a; 组播源配置&#xff1a; R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…

云服务配置docker镜像容器以及常用操作命令

首先通过ssh进入云服务器。如何ssh进入云服务器。 简单讲解一下docker中镜像和容器&#xff0c;打个比方&#xff0c;镜像相当于印钱的那个模板&#xff0c;容器相当于从模板上拓下来的钱&#xff0c;不同的模板可以印出不同的钱。但容器被修改后也可以变成新的镜像&#xff0…

springboot229基于Spring Boot的企业员工薪酬关系系统的设计

springboot229基于Spring Boot的企业员工薪酬关系系统的设计 源码获取&#xff1a; https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

数据结构之---- 动态规划

数据结构之---- 动态规划 什么是动态规划&#xff1f; 动态规划是一个重要的算法范式&#xff0c;它将一个问题分解为一系列更小的子问题&#xff0c;并通过存储子问题的解来避免重复计算&#xff0c;从而大幅提升时间效率。 在本节中&#xff0c;我们从一个经典例题入手&am…

Windows环境下QT应用程序的发布

时间记录&#xff1a;2023/12/17 1.生成版本介绍&#xff0c;debug&#xff1a;调试版本&#xff0c;携带调试信息&#xff0c;占用内存稍大一些&#xff0c;release&#xff1a;发布版本&#xff0c;一般开发完毕选择此套件进行编译生成可执行程序进行发布 2.发布步骤 &#x…

时序预测 | Python实现LSTM-Attention电力需求预测

时序预测 | Python实现LSTM-Attention电力需求预测 目录 时序预测 | Python实现LSTM-Attention电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行…

CentOS7安装Docker及添加阿里云镜像加速详细教程

Docker官方安装教程网站&#xff1a;Install Docker Engine on CentOS | Docker Docs 具体流程如下&#xff1a; 1.确定你是CentOS7及以上版本 cat /etc/redhat-release 2.yum安装gcc相关 yum -y install gcc yum -y install gcc-c 3.安装需要的软件包 3.1安装docker引擎…

Redis7--基础篇8(集群cluster)

1. 集群&#xff08;cluster&#xff09;介绍 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集 的一部分&#xff0c;这就是Redis的集群&#xff0c;其作用是提供在多个…

Java技术栈 —— Log4j 2、Logpack、SLF4j日志框架介绍

Log4j 2、Logpack、SLF4j日志框架介绍 Log4j 2、Logpack、SLF4j日志框架&#xff0c;及其区别1.1 Log4j 21.1.1 日志级别1.1.2 日志输出目标位置1.1.3 日志刷新机制1.1.4 结构化打印日志1.1.5 异步打印日志1.1.6 在Cloud云环境汇集日志信息 1.2 LogPack1.3 SLF4j1.4 区别 Log4j…

Python Django Suit:构建现代化的Django后台管理

概要 Django Suit是一款为Django后台管理提供现代、优雅界面的第三方应用&#xff0c;它致力于提升Django开发者的管理体验。本文将深入介绍Django Suit的安装、配置和高级功能&#xff0c;提供详实的示例代码&#xff0c;帮助大家更好地使用和定制Django后台管理界面。 安装与…

高压脉冲发生器的各种电路图

高压脉冲发生器电路图一&#xff1a; 高压脉冲发生器的主放电回路的等效电路。其中&#xff0c;S是可控开关&#xff0c;C1是电容器组电容&#xff0c;R1是高压变压器输入端的损耗电阻&#xff0c;L1&#xff0c;L2分别是高压变压器初次级电感&#xff0c;K为耦合系数&#xff…

遥感论文 | Scientific Reports | 一种显著提升遥感影像小目标检测的网络!

论文题目&#xff1a;MwdpNet: towards improving the recognition accuracy of tiny targets in high-resolution remote sensing image论文网址&#xff1a;https://www.nature.com/articles/s41598-023-41021-8 摘要 提出MwdpNet&#xff0c;以提高对高分辨率遥感&#xf…

vue3 element-plus 日期选择器 el-date-picker 汉化

vue3 项目中&#xff0c;element-plus 的日期选择器 el-date-picker 默认是英文版的&#xff0c;如下&#xff1a; 页面引入&#xff1a; //引入汉化语言包 import locale from "element-plus/lib/locale/lang/zh-cn" import { ElDatePicker, ElButton, ElConfigP…

SpringBoot零基础入门到项目实战——学习路线规划与目录结构

文章目录 第一部分&#xff1a;Spring Boot基础第二部分&#xff1a;Web开发与RESTful API第三部分&#xff1a;数据访问与持久化第四部分&#xff1a;安全与身份验证第五部分&#xff1a;高级主题第六部分&#xff1a;测试总结与扩展实战项目练习 &#x1f389;欢迎来到Spring…