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_init3,设置编码格式:mysql_set_character_set4,打开mysql连接:mysql_real_connect5,执行sql语句:mysql_query6,获取查找的结果集7,通过步骤5的返回值,获取查询到的数据mysql_num_rows:获取结果集中的行数mysql_num_fields:获取结果集中的列数mysql_fetch_field:获取列名mysql_fetch_row:获取每一行的数据8,关闭结果集:mysql_free_result9,关闭连接: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");}elseprintf("连接成功\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;
}

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

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

相关文章

Zabbix监控系统部署与管理

目录 zabbix介绍 zabbix构成 zabbix进程 环境 zabbix-server节点部署 安装zabbix服务 安装与配置数据库 修改zabbix-PHP时区 登录网页安装 ​编辑数据库Access denied故障 zabbix-agent节点部署 zabbix web管理 中文乱码问题 zabbix介绍 zabbix是⼀个基于 Web 界…

【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 码元 速率和波特 思考1 思考2 思考3 带宽&#xff08;Bandwidth&#xff09; &#x1f4dd;总结 码元…

十七、如何将MapReduce程序提交到YARN运行

1、启动某个节点的某一个用户 hadoopnode1:~$ jps 13025 Jps hadoopnode1:~$ yarn --daemon start resourcemanager hadoopnode1:~$ jps 13170 ResourceManager 13253 Jps hadoopnode1:~$ yarn --daemon start nodemanager hadoopnode1:~$ jps 13170 ResourceManager 15062 Jp…

Python开源项目周排行 2023年第40周

Python 趋势周报&#xff0c;按周浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当周相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 关注微…

Mapreduce小试牛刀(1)

1.与hdfs一样&#xff0c;mapreduce基于hadoop框架&#xff0c;所以我们首先要启动hadoop服务器 --------------------------------------------------------------------------------------------------------------------------------- 2.修改hadoop-env.sh位置JAVA_HOME配…

ubuntu安装详细步骤

一&#xff0c;先下载vmware 1&#xff0c;第一步打开上面链接 下载网址 : https://www.vmware.com/products/workstation-pro/wo rkstation-pro-evaluation.html 许可证 JU090-6039P-08409-8J0QH-2YR7F ZF3R0-FHED2-M80TY-8QYGC-NPKYF FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6 ZC3T…

StatusBar、NavigationBar窗口显示在Activity下面之aosp14窗口类bug线索征集

背景&#xff1a; hi&#xff0c;粉丝朋友们&#xff1a; 从上次帮助国际学员解决了一个分屏有黑屏的bug后&#xff0c;相关blog和解决方法 https://blog.csdn.net/learnframework/article/details/134708393 解决方法看b站视频&#xff1a; https://www.bilibili.com/video/B…

scala表达式

1.8 表达式&#xff08;重点&#xff09; # 语句(statement)&#xff1a;一段可执行的代码# 表达式(expression)&#xff1a;一段可以被求值的代码&#xff0c;在Scala中一切都是表达式 - 表达式一般是一个语句块&#xff0c;可包含一条或者多条语句&#xff0c;多条语句使用“…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Java EE 网络之网络初识

文章目录 1. 网络发展史1.1 独立模式1.2 网络互连1.3 局域网 LAN1.4 广域网 WAN 2. 网络通信基础2.1 IP 地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 什么是协议分层2.5.2 分层的作用2.5.3 OSI七层协议2.5.4 TCP/IP五层协议2.5.5 网络设备所在分层 2.6 分装和分用 …

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

【C++11特性篇】一文助小白轻松理解 C++中的【左值&左值引用】【右值&右值引用】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【左值&#xff06;左值引用】&…

广州华锐互动:VR煤矿特殊工种作业实训帮助提高矿工的操作技能和安全意识

VR煤矿特殊工种作业实训系统为煤矿企业培训提供了全方位的支持&#xff0c;帮助提高矿工的操作技能和安全意识&#xff0c;促进煤矿企业的安全生产。 首先&#xff0c;VR煤矿特殊工种作业实训系统可以提供逼真的虚拟操作环境&#xff0c;使矿工能够身临其境地感受各种工种的作业…

k8syaml提供的几个有意思的功能,Kubernetes在线工具网站

k8syaml.cn 提供的几个有意思的功能。 一、yaml资源快速生成 之前编写operator的helm的时候就需要自己写deployment、service、configmap这些资源&#xff0c;那么多字段也记不清&#xff0c;都是先找个模版&#xff0c;然后copy改改&#xff0c;再看官方文档&#xff0c;添加…

流程图、泳道图的介绍和示例分享,以及自定义元件库的介绍

目录 一. 流程图介绍 二. Processon使用 新建一个流程图 图形的使用 三. 流程图示例 登录界面 门诊业务流程图 住院业务流程图 药房业务流程图 会议OA流程图 四. 泳道图介绍 五. 自定义元件库 5.1 新建一个元件库 5.2 创建元件 5.3 使用自定义元件库 一. 流程图介…

初识SpringSecurity

目录 前言 特点 快速开始 导入依赖 运行项目 访问服务 权限控制 实现UserDetails接口 添加SecurityConfig配置类 测试接口DemoController 设置权限控制authorizeHttpRequests 结果分析 总结 前言 Spring Security是一个强大且高度可定制的身份验证和访问控制框架…

Openwrt源码下载出现“The remote end hung up unexpected”

最近项目原因需要下载openwrt21.02版本源码&#xff0c;花费了很多时间&#xff0c;找到正确方法后&#xff0c;发现可以节省很多时间&#xff0c;记录下过程&#xff0c;方便自己&#xff0c;可能方便他人。 一.问题阐述 openwrt21.02下载链接如下&#xff1a; git clone -…

提升数据分析效率:Amazon S3 Express One Zone数据湖实战教程

前言 什么是 Amazon S3&#xff1f;什么是 S3 Express One Zone&#xff1f;实现概述 技术架构组件实现步骤概览 第一步&#xff1a;构建数据湖的基础第二步&#xff1a;选择并查看数据集第三步&#xff1a;在 Athena 中搭建架构第四步&#xff1a;数据转换与优化第五步&#x…

Windows安装Elasticsearch并结合内网穿透实现公网远程访问

Windows安装Elasticsearch并结合内网穿透实现公网远程访问 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜…

vue3.0项目搭建

一、安装vue3脚手架 卸载vue2脚手架 npm uninstall -g vue-cli清除缓存 npm cache clen --force安装最新脚手架 npm install -g vue/cli查看脚手架版本 vue -V 二、构建项目 创建项目 vue create 项目名选择配置 自定义配置&#xff0c;回车 上下键选择Linter / Formatter&a…