MYSQL基础之 视图

2023-05-16

概念

什么是视图?

视图是基于 SQL 语句的结果集的可视化的表。

当然视图也是数据库中对象之一,其它的对象包括:表,数据字典,约束,索引,触发器,存储过程,以及存储函数。这些后面再聊,本篇主要聊的就是视图。

而视图本身不存储数据,而是通过映射原表,方便用户对数据进行查看和操作。

视图让用户使用表或者多个表的一部分数据,而不是所有的表数据。这样可以针对不同的用户定制不同的查询视图,这样让同样的数据对不同的人呈现不同的假表数据,其实保证了数据的安全。

视图时一种虚拟表,本身是不具有数据,占用很少的内存空间,是SQL中的重要对象。

视图的存在依托于已有的表,而这些表时基表。

  • 视图的创建和删除只影响视图本身,不会影响到基表,但是如果对视图的数据进行增删改等操作的时候,基表的数据也会相应的放生变化,反之亦然。
  • 其实创建视图 的时候,需要通过SELECT语言,所以可以将视图简易理解位存储起来的SELECT语言查询结果。视图本身不存储数据的,还是前面说的时映射的数据。

其实视图时向用户提供基表数据的另一种形式,通常情况下小型项目的数据库可以不适用视图。所以再大型项目,以及数据表比较复杂的情况下,视图就体现出有点了。将经常查询的记过放在视图中,提升使用效率,

其实视图本质:就是将一个表或多个表关联的查询的结果生成一个视图。而视图本身不存储数据,而是通过映射基表,方便用户对数据进行查看和操作。视图创建和删除不影响基表,但增删改会影响基表。

创建视图

创建视图的格式:

CREATE [OR REPLACE ]
[ALGORITHM ={ UNDEFINED |MERGE | TEMPTABLE }]
VIEW 视图名 [(字段名)]
AS 查询语句
[WITH [CASCADED |LOCAL] CHECK OPTION ]

-- 上面时完整的结构,但是一般使用格式如下,有点像是通过数据创建表的样式。
CREATE [OR REPLACE ]
VIEW 视图名 [(字段名)]
AS 查询语句




对有些新的关键子进行讲解

  • REPLACE 表示替换已经创建的视图
  • ALGORITHM 表示的时视图的算法,其中参数有三个。
    • UNDEFINED: 表示MYSQL将自动选择算法。
    • MERGE:表示将使用的视图语句和视图定义合并,使得视图定义的某一部分取代语句对应的部分。
    • TEMPTABLE:表示将视图的结果存入临时表,然后用临时表执行语句。
  • CASCADED与LOCAL为可选参数
    • CASCADED为默认值。表示更新视图时要满足所有先关视图和表的条件;
    • LOCAL表示更新视图时满足该视图本身定义的条件即可。

现在开始演示,这个时候就用之前聊查询语言的是表进行,演示也就是,三张表:员工表,部门表和工资等级表。

员工表:

在这里插入图片描述

部门表:

在这里插入图片描述

工资等级表:

在这里插入图片描述

为了方便演示,直接通过员工表和部门表进行演示。

SELECT dept.dname,emp.empno,emp.ename FROM  emp, dept WHERE emp.deptno=dept.deptno;

在这里插入图片描述

然后创建视图:

CREATE VIEW table_v AS  SELECT dept.dname,emp.empno,emp.ename,emp.sal FROM  emp, dept WHERE emp.deptno=dept.deptno;

-- 然后查询视图
SELECT * FROM table_v;

在这里插入图片描述

这个视图没有写视图的字段,这个是可以重新写字段名,但是有一点 ,就是字段个数和SELECT中的字段个数要一样。

现在有一个一个问题,前面说是的映射的表,那么带有函数的查询语句可以创建视图吗?

SELECT dept.dname,AVG(emp.sal) FROM  emp, dept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno

在这里插入图片描述

然后创建视图:

CREATE VIEW table_v1 (dname,ave_sal) AS  SELECT dept.dname,AVG(emp.sal) FROM  emp, dept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno;
 
SELECT * FROM table_v1;

在这里插入图片描述

可以看出调用的MYSQL的函数也是可以创建视图的。如何证明是映射,后面可以通过更新基表,看其是否改变即可。后面修改后面会演示,暂时保留。

视图的有关的sql

查询数据库中有多少视图:

SHOW TABLES; 

在这里插入图片描述

查看视图结果:

DESC / DESCRIBE 视图名

例子:

DESC table_v1;

在这里插入图片描述

查看视图的属性信息

-- 查看视图信息(显示存储引擎,版本,数据行数和数据大小等)
SHOW TABLE STATUS  LIKE '视图名';

演示例子

-- 先查询表的属性
SHOW TABLE STATUS  LIKE 'emp';

在这里插入图片描述

SHOW TABLE STATUS  LIKE 'table_v1';

在这里插入图片描述

通过视图和表的对比可以看出,视图中的所有属性都是NULL,所以可以通过这个命令确立要查询的表是虚拟表还是真表。

这个截图看着有点长,如果方便看可以在dos创建查看:

SHOW TABLE STATUS  LIKE 'table_v1' \G

在这里插入图片描述

还有一个可以看创建视图的语句。

SHOW CREATE VIEW 视图名称;
-- 这个就不在演示了,毕竟前面在表中演示过。

还有可以通过视图生成视图,就像是套娃了,这个就不在演示了。

视图更新数据

前面说过如果对数据库视图进行增删改操作会影响原来的数据库。

当然如果对基表进行操作也会影响视图,两者彼此会影响的。

现在更新一下视图的

-- 可以看出更新视图中 empno='7900'的工资950更改位1000
UPDATE table_v SET table_v.sal='1000'  WHERE table_v.empno='7900';

在这里插入图片描述

现在看一下员工表

SELECT * FROM emp   WHERE emp.empno='7900';

在这里插入图片描述

前面不是演示了上面没有更新的视图table_v1如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKOWnpku-1643175420470)(F:\文档\笔记\数据库\mysql\12:视图.assets\image-20220123204753145.png)]

现在看一下 更新视图中 empno='7900'的工资950更改位1000,影响了基表,然后看一下基表会不会影响视图table_v1;

在这里插入图片描述

这个又涉及到一个神奇的操作,那就是是否可以操作table_v1中的ave_sal的值?

UPDATE table_v1 SET table_v1.ave_sal='1000'  WHERE table_v1.dname='SALES';

在这里插入图片描述

这个可以看出视图中的字段如果在基表中没有,就会报错,这种没有不是说字段名不一样而是其来源直接没有,这个是通过计算得到的。

现在看是否删除会相互影响:

-- 通过删除视图中 empno='7900'的数据
DELETE FROM table_v  WHERE empno='7900';

前面说过是UPDATE,这个相对限制很小,几乎所有的都可以操作,但是对于INSERT 和DELETE 就有点不同,这个限制有点多。

如果INSERT 和DELETE可以用前提是视图中行和底层基表中的行必须存在一对一的关系。然后看一下不能增删的视图条件:

  • 在定义视图的是时候指定了”ALGORITHM=TEMPTABLE“,视图将不支持INSERT 和DELETE操作。
  • 视图中不包含基表中所有被定义位非空又未指定默认值的列,视图不支持INSERT 操作。
  • 在定义视图的SELECT语言中使用了JOIN联合查询,视图将不支持INSERT和DELETE操作。所以前面说一下要一对一,毕竟联合查询得到视图,视图就不是一一对应基表了。
  • 在定义视图的SELECT 语言后的字段列表中使用了数字表达式或子查询,视图将不支持INSERT,也不支持INSERT,也不支持UPDATE使用数学表达式,子查询的字段。如果子查询应用了FROM后面的表不但不支持INSERT,还不支持UPDATE,DELETE.
  • 在定义视图的SELECT语句后的字段使用了DISTINCT,聚合函数,GROUP BY,HAVING,UNION等,视图不支持INSERT,UPDATE,DELETE。
  • 视图定义了一个不可更新的表或者式常量视图表。

上面总结其实有点绕,下面依次演示。

为了演示效果,所以只是简单的演示,所以数据本身就没有多少意义。

CREATE TABLE  test_a(
t_id INT,
t_name VARCHAR(5),
t_flag INT
);

CREATE TABLE test_b(
t_flag INT,
t_flag_name VARCHAR(10)
);

INSERT INTO test_a VALUES (1,'a_a','1');
INSERT INTO test_a VALUES (2,'a_b','2');
INSERT INTO test_a VALUES (3,'a_c','2');
INSERT INTO test_a VALUES (4,'a_d','3');
INSERT INTO test_b VALUES (1,'b_a');
INSERT INTO test_b VALUES (2,'b_b');
INSERT INTO test_b VALUES (3,'b_c');

非一对一

通过join on(= 也是这个其中一个)关联

CREATE VIEW t_v1 AS
SELECT  t_name, t_flag_name FROM   test_a,test_b WHERE test_a.`t_flag`=test_b.`t_flag`;

其实UPDATE就不在演示了,毕竟前面已经演示了,现在看是否可以插入和删除。

首先插入:

INSERT INTO t_v1 VALUES ('a_g','b_g');

在这里插入图片描述

提示前面没有知名后面的数据指定的字段名,所以这个可以补充字段才行,前提可以试一下如果只有一个字段呢?

CREATE VIEW t_v2 AS
SELECT  t_name  FROM   test_a,test_b WHERE test_a.`t_flag`=test_b.`t_flag`;

INSERT INTO t_v2 VALUES ('a_gg');

在这里插入图片描述

可以看出在多表形成视图中哪怕只有一个字段也是需要加入字段名的。

INSERT INTO t_v1 ( t_name, t_flag_name ) VALUES ('a_g','b_g');

在这里插入图片描述

然后加全后就报错,无法插入超过一个表以上的视图,无论是否非显示字可以非空都会报错。

但是如果你插入的是虽然是两个表产生的视图,但是另一个表对呈现的数据没有任何作用,比如上面的t_v2;

-- 这个就无法通过视图 SELECT * FROM  test_a查看了
-- 而是通过
SELECT * FROM  test_a;

在这里插入图片描述

虽然没有显示但是t_flag 无法匹配 test_b中数据所以只能通过基表看。

可以看出这个虽然是两个表,但是字段只是一个表显示字段没有用另一个表的,所以可以看成一个表。

现在看一下如果删除的话:

DELETE FROM  t_v1;

在这里插入图片描述

可以看出无法删除多表关联生存的视图。

现在试一下

DELETE FROM  t_v2;

在这里插入图片描述

虽然插入的数据t_v2可以成功,但是删除就报错。

至于添加默认和非空这个限制就不在多表中体现了,而是在单表演示了。

子查询

其实t_v2有点像是用了子查询的意思了,不过还是不同的。现在重新来一个,不过子查询也有两种情况,一种是子查询作为一个条件存在,一个是子查询作为一个字段。

-- 这一种有人会让其放入一对一的关系中
CREATE VIEW t_v3 AS
SELECT  t_name  FROM   test_a  WHERE t_flag IN (SELECT t_flag FROM test_b) ;

在这里插入图片描述

update就不在演示了,这个其实除非不可改或者限制唯一然后更改了数据重复,一般都是可以用的,主要针对是插入和删除。

INSERT INTO  t_v3  VALUES ('a_zc');

如果使用的是子查询,在插入的时候可以不带字段名。

在这里插入图片描述

在这里插入图片描述

所以就不用演示带字段名的了,现场尝试一下是否可以删除。

DELETE FROM  t_v3 WHERE t_name='a_d';

在这里插入图片描述

可以看出可以删除,同时也影响了原表。

现在在来一个子查询,这个关联可以在FROM前面

CREATE VIEW t_v4 (t_name,t_flag_name) AS
SELECT  t_name ,(SELECT test_b.`t_flag_name` FROM test_b WHERE test_b.`t_flag`=test_a.`t_flag` ) FROM   test_a ; 

在这里插入图片描述

插入就不尝试用前面无字段的,直接演示带字段的,因为带字段的都会报错,不要提不带字段的了

INSERT INTO  t_v4  (t_name,t_flag_name) VALUES  ('a_v4','b_v4');

在这里插入图片描述

插入都不靠谱,那就说实话删除也会报错

DELETE FROM t_v4;

在这里插入图片描述

一对一

对于一对一,这个很好理解就是视图本身通过一个表而生成视图,不过这个又会分好几种。如果不涉及任何运算,同时字段中没有非空的或者有非空限制但是又默认值的基表,通过其生成的视图完全可以增删改,而下面举的例子是插入删除的例子。

聚合函数

这个最常见的就是AVG,COUNT等所以只列出一个例子。

test_a表的内容恢复到初始化。

CREATE VIEW t_v5 AS 
SELECT t_flag,COUNT(t_flag) t_count FROM test_a GROUP  BY t_flag;

现在尝试一下是否可以更新:

UPDATE t_v5 SET t_flag='5' WHERE t_flag='1';

在这里插入图片描述

直接报错,那通过函数操作的t_count就更不用演示更新了,这个也会报错的。

现在尝试一下插入和删除。

INSERT INTO t_v5   VALUES ('11','12');

这种不会报错其没有限制字段,而是直接报错不可以插入数据。

在这里插入图片描述

INSERT INTO t_v5 (t_flag,t_count) VALUES ('11','12');
-- 和不带字段的报错一样,所以不在截图

可以删除吗?

DELETE FROM  t_v5 WHERE t_flag='1'

在这里插入图片描述

可见也无法删除。所以说有了聚合函数只能更新无法插入和删除。

HAVING

在聚合函数中演示的时候说无法插入和删除,一般使用HAVING的时候常与函数搭配使用,但是目前不考虑效率讲HAVING只作为一个类似WHERE的操作呢?

CREATE VIEW t_v6 AS 
SELECT t_flag  FROM test_a HAVING t_flag>'1' ;

更新尝试:

UPDATE t_v6 SET t_flag='5' WHERE t_flag='3'

在这里插入图片描述

更新都无法操作,为什么会这样呢?虽然讲HAVING当作一个WHERE使用,但是其在SQL中读取的顺序中还是GTOUP BY 等后面,所以前面都无法插入后面的就更不可能会允许更改了,后面的插入和删除就不在演示了,毕竟更新要求最低都不满足插入和删除更不可能了。

DISTINCT

CREATE VIEW t_v7 AS 
SELECT DISTINCT t_id   FROM test_a 

其实为了体现DISTINCT应该使用的字段是t_flag,但是为了演示哪怕这个DISTINCT关键没有意义,但是其还是会影响增改删。

UPDATE t_v7 SET t_id='5' WHERE t_id='1'

在这里插入图片描述

看这个就不允许演示插入和删除了吧,还是老话要求最低的你都满足不了,要求更高的就不要想了。

有时候记前面的有点复杂个人总结记住虽然不敢说全,但是好记够用。

两表以上相关联,无论通过join还是子查询,删除插入不要想。

还有一种怪现象,两表想联呈现字段为一表可插不可删。

更新要求它最低,两表以上就不提哪怕一表有函数,HAVING,DISTINCT等增删改就莫想了。

没有上面的限制,基表只唯一,查看字段是否有限制。

修改视图

这个有两种 第一种:

CREATE OR REPLACE VIEW 视图名
[字段]
as
查询语句

第二种:

ALTER VIEW 视图名
as
查询语句

这个是整体将视图修改了,比如增加字段或者修改再视图中呈现的字段名。这个感觉有点像是将视图又重新生成了一遍。

删除视图

删除视图只是删除视图的定义,并不会删除基表的数据。(是drop 而非delete )

--
DROP VIEW [IF EXISTS] 视图名

--
DROP VIEW [IF EXISTS] 视图名1,视图名2………………


如果是基于视图创建的视图,如果刹车删除所谓的假基表(视图)也会导致基于假基表视图无法查询出数据,所以需要清楚这个关系。

类推也就是如果删除基表也会影响视图的查询。

总结

  • 优点

    • 操作简单,将一些不关心的数据屏蔽掉让开发人员可以更简单的操作表。不用关心表直接关系,只需要查询即可。同时也可以将很多复杂的逻辑进行分解,创作多个视图获取数据,再将视图集合得到最终数据
    • 减少数据冗余: 如果满足操作简单,可以创建一个表插入即可但是占用空间,而视图不会。
    • 数据安全:前面一直说可以隐藏没必要显示的字段,无法得知数据库本来的数据库表结构以及表关系。再结合用户的权限控制会更加保证了数据的安全。
    • 适应灵活多变需求:毕竟业务系统的需求变化后,一般数据库表也会改变结构,则工作量相对较大,可以使用视图来减少这些改动带来的工作量。
  • 缺点

    视图本身是依托基表的,所以基表的修改都会影响视图,有时候修改过大可能需要即使对相关的视图进行维护。有些是视图上创建视图,这样套娃的方式让其维护变得比较负责,可读性不是很友好。

    视图可以重新定义字段名,还可以包含复杂的逻辑,这些都会增加维护成本。

    所以视图是否需用这个需要,需要依托于自己的项目是否需要以及公司要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL基础之 视图 的相关文章

  • 解决报错libssl.so.1.1: cannot open shared object file: No such file or directory

    解决报错libssl so 1 1 cannot open shared object file No such file or directory Linux运维 更新于 2020年8月25日 0 条评论 Centos7 默认提供的 op
  • nginx代理下django debug toolbar不显示

    nginx代理的django服务 xff0c 平时正常 xff0c 今天不显示 xff0c 不用nginx代理正常 xff0c 查了半天 xff0c 突然想起来上午把nginx代理的静态文件下的debug toolbar静态文件夹给删了 x
  • Hadoop中的HDFS文件下载到远程机

    使用Hadoop下载文件不落地直接到远程服务器 xff0c 使用到hadoop api和JSch 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的
  • cookie 存放地点

    什么是Cookie xff1f A cookie also known as an HTTP cookie web cookie or browser cookie is a small piece of data sent from a
  • boost使用之编译库及遇到的问题

    最近因为在学习网络编程相关的东西 xff0c 准备学习一下boost xff0c 毕竟原生的网络编程太麻烦 看了一下其实windows下想使用起来很简单 xff0c 就是下载库 xff0c 然后运行脚本 xff0c 然后运行exe库就出来
  • windows消息机制(MFC)

    消息分类与消息队列 Windows中 xff0c 消息使用统一的结构体 xff08 MSG xff09 来存放信息 xff0c 其中message表明消息的具体的类型 xff0c 而wParam xff0c lParam是其最灵活的两个变量
  • POSTGRESQL表、字段添加注释和查询注释

    postgresql的注释工具层面的支持并不友好 xff0c 因此可采用命令的形式来进行字段 表进行添加注释 同时 xff0c 也可以通过一条SQL语句来查询字段的注释和类型 首先我们来看添加注释 xff1a 表添加注释 comment o
  • Armbian bullseye 系统OMV 6.x安装分享

    OMV 5 x网上教程很多 6 x的官方有方法 xff0c 但是因为墙的原因 xff0c 要换源 对初学者来说并没有一份完全照抄的教程参考 经过一番摸索 总结了下OMV 6 x的安装过程如下 第一步当然是Armbian系统烧录 这步网上教程
  • 使用Go语言 在windows下 实现隐藏进程命令行参数 保护密码等数据

    C语言在unix下可以通过直接覆写argv的方式隐藏参数 xff0c 但是在windows下由于win32 api的限制 xff0c 获取到的参数是一串连续的字符串 xff0c 在C语言的main函数调用之前已经由C标准库实现了分割 xff
  • Linux 环境部署-- gitlab

    一 安装并配置必要的依赖关系 1 安装ssh yum install y curl policycoreutils pythonopenssh server 2 将SSH服务设置成开机自启动 xff0c 安装命令 xff1a sudo sy
  • Mysql先排序后分组(全网最有效最简单的办法)

    Mysql先排序后分组 mysql常见的排序分组是使用子查询先排序再分组 xff0c 我们来用另外一种方式实现简单的分组排序 1 创建测试数据表 此步骤省略 2 生成测试数据 此步骤省略 3 直接上查询代码 第一层 xff1a 查询基础数据
  • 视音频数据处理入门:颜色空间(二)---ffmpeg

    目录 概述 流程 相关流程 初始化方法 初始化代码 转换方法 转换代码 释放方法 整体代码介绍 代码路径 概述 本篇简单说一下基于FFmpeg的libswscale的颜色空间转换 xff1b Libswscale里面实现了各种图像像素格式的
  • java 中 请求https unable to find valid certification path to requested问题两步搞定

    有些https证书是我们自建的 xff0c 没有经过ca机构验证的 xff0c 比如我们的内部服务器环境 xff0c 测试环境 xff0c 在java中去请求这类https会报证书问题 xff0c 有的人说直接在代码里写死直接信任所有htt
  • Pycharm连接远程服务器,自动上传文件到服务器(超详细)

    因为用的是最新版的Pycharm xff0c 所以网上的好多教程跟我总是有出入 xff0c 经常遇到一种情况 xff0c 就是设置了自动上传 xff0c 但是就是上传不了 xff0c 点击手动上传有时候也会失败 xff0c 挺坑的 xff0
  • 【原创】Ubuntu 使用 pip3 安装 jupyterlab

    安装准备 1 什么是 JupyterLab JupyterLab is a web based interactive development environment for Jupyter notebooks code and data
  • 【原创】Debian 10 更换 aliyun apt-get 源

    概要 1 简介 将 Debian 10 的 apt get 源更换为 aliyun xff0c 以提升国内环境 apt install 的速度 2 版本信息 Debian 10 apt 1 8 2 1 详细步骤 1 备份原 apt get
  • 本地文件不能复制粘贴到远程服务器解决办法

    情况一 xff1a 复制粘贴功能原本可以用 xff0c 突然失灵了 解决方式 xff1a 只需重启一下rdpclip exe就可以了 步骤 xff1a 1 打开任务管理器 xff0c 查看进程 xff0c 如果有 rdpclip exe 进
  • windows设置环境变量$PATH和$HOME

    windows下的环境变量 PATH和 HOME xff0c 与linux是一样的意义 打开终端 xff08 linux下是bash tcsh等 xff1b windows下是cmd git bash等 xff09 git bash启动 x
  • 计算两个日期的时间间隔 python

    python中通过datetime模块可以很方便的计算两个时间的差 datetime的时间差单位可以是天 小时 秒 甚至是微秒 这个确实很方便 字符类型的时间 span class token keyword import span dat
  • sudo命令提示“command not found”

    我看目前百度这方面的资料不是很多 xff0c 便记录一下linux上遇到的这类问题 如果sudo执行命令运行文件时提示 xff1a command not found xff0c 那是因为安装编译sudo时默认自带了 with secury

随机推荐

  • ubuntu下给用户添加sudo权限,并且如何取消sudo权限

    通过命令 xff1a id username 来查看用户信息 安装ubuntu时 xff0c 创建了一个普通用户 xff0c 没有sudo权限 xff0c 执行sudo相关命令失败 xff0c 原因该普通用户没有加到超级用户组 xff0c
  • PCA变换与KL变换

    PCA 方法是由 Turk 和 Pentlad 提出来的 xff0c 它的基础就是 Karhunen Loeve 变换 简称 KL变换 xff0c 是一种常用的正交变换 PCA的变换矩阵是协方差矩阵 xff0c K L变换的变换矩阵可以有很
  • ERS卫星精密轨道数据下载地址

    http www deos tudelft nl ers precorbs orbits
  • libgdal.so.1: no version information available解决办法

    http www wuaimate cn 2013 01 关于no version information available问题的处理
  • 混沌时间序列分析与预测工具箱 Version2

    http blog sina com cn s blog 768123f801015i8j html
  • MATLAB画图常用调整代码

    http blog chinaunix net uid 11829250 id 3472528 html
  • Lp空间和L范数

    1 Lp空间和L范数 1 1 Lp空间 xff1a Lp空间是由p次可积函数组成的空间 xff1b 1 2 L范数 xff1a 给定向量 L1范数 xff1a 向量各个元素绝对值之和 L2范数 xff1a 向量各个元素的平方求和然后求平方根
  • iOS高级控件之tableViewController-城市列表

    今天我们要做的是一个城市信息的展示 xff0c 先给大家看看是怎样的一个效果 xff0c 我想应该是绝对的实用 好了 xff0c 接下来我就简要的给大家讲讲步骤 xff0c 因为技术博客写的真心不多 xff0c 也不知道该怎样讲才能把每一个
  • 用顺序栈判断是不是回文串(C++)

    typedef struct l char span class hljs typedef span class hljs keyword data span 250 span int top stack span class hljs t
  • ubuntu启动后停留在开机界面进不去系统解决方法

    修电脑困难户又上线了嘎嘎 简单粗暴地列出解决方法 xff0c 仅针对此次情况有效 xff1a https blog csdn net cheneykl article details 79111618 记录完毕 xff0c 溜了
  • 音视频开源项目shotcut源码编译

    xff08 0 xff09 工具安装 安装 msys2 安装 fftw pacman S mingw w64 x86 64 fftw 安装 pkg config pacman S mingw w64 x86 64 pkg config xf
  • 理论基础 —— 排序 —— 直接选择排序

    概述 直接选择排序又称简单选择排序 xff0c 是一种不稳定的排序方法 xff0c 其是选择排序中最简单一种 xff0c 其基本思想是 xff1a 第 i 趟排序再待排序序列 a i a n 中选取关键码最小的记录 xff0c 并和第 i
  • 最大跨度值(信息学奥赛一本通-T1063)

    题目描述 给定一个长度为n的非负整数序列 xff0c 请计算序列的最大跨度值 最大跨度值 61 最大值减去最小值 输入 一共2行 xff0c 第一行为序列的个数n xff08 1 n 1000 xff0c 第二行为序列的n个不超过1000的
  • 与指定数字相同的数的个数(信息学奥赛一本通-T1068)

    题目描述 输出一个整数序列中与指定数字相同的数的个数 输入包含2行 xff1a 第1行为N和m xff0c 表示整数序列的长度 N 100 和指定的数字 xff1b 第2行为N个整数 xff0c 整数之间以一个空格分开 输出为N个数中与m相
  • 【洛谷】题解目录

    1 新手村 关卡1 1 洛谷的第一个任务 超级玛丽游戏 xff08 洛谷 P1000 xff09 xff1a 点击这里 A 43 B Problem xff08 洛谷 P1001 xff09 xff1a 点击这里小玉买文具 xff08 洛谷
  • 家谱树(信息学奥赛一本通-T1351)

    题目描述 有个人的家族很大 xff0c 辈分关系很混乱 xff0c 请你帮整理一下这种关系 给出每个人的孩子的信息 输出一个序列 xff0c 使得每个人的后辈都比那个人后列出 输入 第1行一个整数N xff08 1 N 100 xff09
  • 数的划分(洛谷-P1025)

    题目描述 将整数 n 分成 k 份 xff0c 且每份不能为空 xff0c 任意两个方案不相同 不考虑顺序 例如 xff1a n 61 7 xff0c k 61 3 xff0c 下面三种分法被认为是相同的 1 1 5 1 5 1 5 1 1
  • 外网访问内网服务器设置方法(路由器设置)

    A 外网访问内网服务器的设置方法 实验室有一台服务器 xff0c 现有外网访问该服务器的需求 xff0c 网上有各种教程 xff0c 但是有些地方比较模糊 xff0c 不甚详细 xff0c 现将我的设置记录如下 xff0c 作为参考 目前的
  • Tesseract OCR数码管数字的样本训练

    Tesseract默认情况下基本无法对LED数码管显示屏进行识别 但由于Tesseract具有样本机器学习训练的能力 xff0c 因此可利用该技术实现Tesseract对LED数码管的OCR识别 xff0c 这需要对图片进行预处理 一 图像
  • MYSQL基础之 视图

    概念 什么是视图 xff1f 视图是基于 SQL 语句的结果集的可视化的表 当然视图也是数据库中对象之一 xff0c 其它的对象包括 xff1a 表 xff0c 数据字典 xff0c 约束 索引 xff0c 触发器 xff0c 存储过程 x