当前位置: 首页 > news >正文

PostgreSql 视图

一、概述

  视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。 我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。
优势

  • 不保存数据,节省空间。
  • 减少频繁调用 sql 的重复书写。
  • 可控制数据访问,隐藏不想对外展示的数据。

劣势

  • 可能增加数据库压力,严重时会妨碍整个数据库的运行。(常见于复杂视图)

二、语法

2.1 创建视图

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ][ WITH ( view_option_name [= view_option_value] [, ... ] ) ]AS query[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

CREATE VIEW:定义一个查询的视图。
CREATE OR REPLACE VIEW:如果已经存在一个同名视图,该视图会被替换(限制:只能在原视图基础上增加字段,不能减少字段,且增加字段顺序只能排在最后)。
TEMPORARY|TEMP:视图被创建为一个临时视图。在当前会话结束时会自动删掉。当临时视图存在时,具有相同名称的已有永久视图对当前会话不可见,除非用模式限定的名称引用它们。如果视图引用的任何表是临时的,视图将被创建为临时视图(不管有没有指定TEMPORARY)。
RECURSIVE:创建一个递归视图。
name:要创建的视图的名字(可以是模式限定的)。
column_name:要用于视图列的名称列表,可选。如果没有给出,列名会根据查询推导。
WITH ( view_option_name [= view_option_value] [, … ] ):这个子句为视图指定一些可选的参数,支持下列参数:

check_option (enum):这个参数可以是 local 或者cascaded,并且它等效于指定 WITH [ CASCADED | LOCAL ] CHECK OPTION(见下文)。 可以使用 ALTER VIEW 在一个现有视图上修改这个选项。
security_barrier (boolean):如果希望视图提供行级安全性,应该使用这个参数。

query:提供视图的行和列的一个 SELECT 或者 VALUES 命令。
WITH [ CASCADED | LOCAL ] CHECK OPTION:这个选项控制自动可更新视图的行为。这个选项被指定时,将检查该视图上的 INSERT 和UPDATE 命令以确保新行满足视图的定义条件(也就是,将检查新行来确保通过视图能看到它们)。如果新行不满足条件,更新将被拒绝。如果没有指定 CHECK OPTION,会允许该视图上的 INSERT 和 UPDATE 命令创建通过该视图不可见的行。支持下列检查选项:

LOCAL:只根据直接定义在该视图本身的条件检查新行。任何定义在底层基视图上的 条件都不会被检查(除非它们也指定了CHECK OPTION)。
CASCADED:会根据该视图和所有底层基视图上的条件检查新行。如果 CHECK OPTION 被指定,并且没有指定 LOCAL 和 CASCADED,则会假定为 CASCADED。 CHECK OPTION 不应该和 RECURSIVE视图一起使用。注意,只有在自动可更新的、没有 NSTEAD OF 触发器或者 INSTEAD 规则的视图上才支持 CHECK OPTION。 如果一个自动可更新的视图被定义在一个具有 INSTEAD OF 触发器的基视图之上,那么 LOCAL CHECK OPTION 可以被用来检查该自动可更新的视图之上的条件,但具有 INSTEAD OF 触发器的基视图上的条件不会被检查(一个级联检查选项将不会级联到一个 触发器可更新的视图,并且任何直接定义在一个触发器可更新视图上的检查 选项将被忽略)。如果该视图或者任何基础关系具有导致 INSERT 或 UPDATE 命令被重写的 INSTEAD 规则,那么在被重写的查询中将忽略所有检查选项,包括任何来自于定义在带有 INSTEAD 规则的关系之上的自动可更新视图的检查。

2.2 修改视图

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )

name:一个现有视图的名称(可以是模式限定的)。
column_name:现有列的名称。
new_column_name:现有列的新名称。
IF EXISTS:该视图不存在时不要抛出一个错误。这种情况下会发出一个提示。
SET/DROP DEFAULT:这些形式为一个列设置或者移除默认值。对于任何在该视图上的 INSERT 或者 UPDATE 命令,一个视图列的默认值会在引用该视图的任何规则或触发器之前被替换进来。因此,该视图的默认值将会优先于来自底层关系的任何默认值。
new_owner:该视图的新拥有者的用户名。
new_name:该视图的新名称。
new_schema:该视图的新模式。
SET ( view_option_name [= view_option_value] [, … ] )/RESET ( view_option_name [, … ] ):设置或者重置一个视图选项。当前支持的选项有:

check_option (enum):更改该视图的检查选项。值必须是 local 或者 cascaded。
security_barrier (boolean):更改该视图的安全屏障属性。值必须是一个布尔值,如 true 或者 false。

2.3 删除视图

DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

IF EXISTS:如果该视图不存在则不要抛出一个错误,而是发出一个提示。
name:要移除的视图的名称(可以是模式限定的)。
CASCADE:自动删除依赖于该视图的对象(例如其他视图),然后删除所有依赖于那些对象的对象。
RESTRICT:如果有任何对象依赖于该视图,则拒绝删除它。这是默认值。

三、示例

3.1 创建视图

--用下列三张基表构建包含员工姓名,工作,部门,隐藏薪资的视图
postgres=# select * from emp;employee_id | first_name | last_name |  email   | phone_number | hire_date  |   job_id   |  salary  | commission_pct | manager_id | department_id
-------------+------------+-----------+----------+--------------+------------+------------+----------+----------------+------------+---------------100 | Steven     | King      | SKING    | 515.123.4567 | 2003-06-17 | AD_PRES    | 24000.00 |                |            |            90101 | Neena      | Kochhar   | NKOCHHAR | 515.123.4568 | 2005-09-21 | AD_VP      | 17000.00 |                |        100 |            90102 | Lex        | De Haan   | LDEHAAN  | 515.123.4569 | 2001-01-13 | AD_VP      | 17000.00 |                |        100 |            90103 | Alexander  | Hunold    | AHUNOLD  | 590.423.4567 | 2006-01-03 | IT_PROG    |  9000.00 |                |        102 |            60104 | Bruce      | Ernst     | BERNST   | 590.423.4568 | 2007-05-21 | IT_PROG    |  6000.00 |                |        103 |            60105 | David      | Austin    | DAUSTIN  | 590.423.4569 | 2005-06-25 | IT_PROG    |  4800.00 |                |        103 |            60106 | Valli      | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG    |  4800.00 |                |        103 |            60107 | Diana      | Lorentz   | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG    |  4200.00 |                |        103 |            60108 | Nancy      | Greenberg | NGREENBE | 515.124.4569 | 2002-08-17 | FI_MGR     | 12008.00 |                |        101 |           100109 | Daniel     | Faviet    | DFAVIET  | 515.124.4169 | 2002-08-16 | FI_ACCOUNT |  9000.00 |                |        108 |           100
(10 rows)postgres=# select * from jobs;job_id   |            job_title            | min_salary | max_salary
------------+---------------------------------+------------+------------AD_PRES    | President                       |      20080 |      40000AD_VP      | Administration Vice President   |      15000 |      30000AD_ASST    | Administration Assistant        |       3000 |       6000FI_MGR     | Finance Manager                 |       8200 |      16000FI_ACCOUNT | Accountant                      |       4200 |       9000AC_MGR     | Accounting Manager              |       8200 |      16000AC_ACCOUNT | Public Accountant               |       4200 |       9000SA_MAN     | Sales Manager                   |      10000 |      20080SA_REP     | Sales Representative            |       6000 |      12008PU_MAN     | Purchasing Manager              |       8000 |      15000PU_CLERK   | Purchasing Clerk                |       2500 |       5500ST_MAN     | Stock Manager                   |       5500 |       8500ST_CLERK   | Stock Clerk                     |       2008 |       5000SH_CLERK   | Shipping Clerk                  |       2500 |       5500IT_PROG    | Programmer                      |       4000 |      10000MK_MAN     | Marketing Manager               |       9000 |      15000MK_REP     | Marketing Representative        |       4000 |       9000HR_REP     | Human Resources Representative  |       4000 |       9000PR_REP     | Public Relations Representative |       4500 |      10500
(19 rows)postgres=# select * from dept;department_id | department_name
---------------+-----------------1 | Adminstration2 | Marketing30 | Purchasing
(3 rows)--构建视图
postgres=# create or replace view emp_details_view
postgres-# as select
postgres-# e.employee_id,
postgres-# e.job_id,
postgres-# e.department_id,
postgres-# e.first_name,
postgres-# e.last_name,
postgres-# d.department_name,
postgres-# j.job_title
postgres-# from emp e
postgres-# join departments d on (e.department_id = d.department_id)
postgres-# join jobs j on (j.job_id = e.job_id);
CREATE VIEW
postgres=# select * from emp_details_view;employee_id |   job_id   | department_id | first_name | last_name | department_name |           job_title
-------------+------------+---------------+------------+-----------+-----------------+-------------------------------100 | AD_PRES    |            90 | Steven     | King      | Executive       | President101 | AD_VP      |            90 | Neena      | Kochhar   | Executive       | Administration Vice President102 | AD_VP      |            90 | Lex        | De Haan   | Executive       | Administration Vice President103 | IT_PROG    |            60 | Alexander  | Hunold    | IT              | Programmer104 | IT_PROG    |            60 | Bruce      | Ernst     | IT              | Programmer105 | IT_PROG    |            60 | David      | Austin    | IT              | Programmer106 | IT_PROG    |            60 | Valli      | Pataballa | IT              | Programmer107 | IT_PROG    |            60 | Diana      | Lorentz   | IT              | Programmer108 | FI_MGR     |           100 | Nancy      | Greenberg | Finance         | Finance Manager109 | FI_ACCOUNT |           100 | Daniel     | Faviet    | Finance         | Accountant
(10 rows)

3.2 修改视图

--增加入职时间字段(字段顺序只能排在原视图末尾。其他修改原视图字段的操作,只能删除视图重新创建)
postgres=# create or replace view emp_details_view
postgres-# as select
postgres-# e.employee_id,
postgres-# e.job_id,
postgres-# e.department_id,
postgres-# e.first_name,
postgres-# e.last_name,
postgres-# d.department_name,
postgres-# j.job_title,
postgres-# e.hire_date
postgres-# from emp e
postgres-# join departments d on (e.department_id = d.department_id)
postgres-# join jobs j on (j.job_id = e.job_id);
CREATE VIEW
postgres=# select * from emp_details_view;employee_id |   job_id   | department_id | first_name | last_name | department_name |           job_title           | hire_date
-------------+------------+---------------+------------+-----------+-----------------+-------------------------------+------------100 | AD_PRES    |            90 | Steven     | King      | Executive       | President                     | 2003-06-17101 | AD_VP      |            90 | Neena      | Kochhar   | Executive       | Administration Vice President | 2005-09-21102 | AD_VP      |            90 | Lex        | De Haan   | Executive       | Administration Vice President | 2001-01-13103 | IT_PROG    |            60 | Alexander  | Hunold    | IT              | Programmer                    | 2006-01-03104 | IT_PROG    |            60 | Bruce      | Ernst     | IT              | Programmer                    | 2007-05-21105 | IT_PROG    |            60 | David      | Austin    | IT              | Programmer                    | 2005-06-25106 | IT_PROG    |            60 | Valli      | Pataballa | IT              | Programmer                    | 2006-02-05107 | IT_PROG    |            60 | Diana      | Lorentz   | IT              | Programmer                    | 2007-02-07108 | FI_MGR     |           100 | Nancy      | Greenberg | Finance         | Finance Manager               | 2002-08-17109 | FI_ACCOUNT |           100 | Daniel     | Faviet    | Finance         | Accountant                    | 2002-08-16
(10 rows)--修改视图名
postgres=# \dvList of relationsSchema |       Name       | Type |  Owner
--------+------------------+------+----------public | emp_details_view | view | postgres
(1 row)postgres=# alter view if exists emp_details_view rename to emp_view;
ALTER VIEW
postgres=# \dvList of relationsSchema |   Name   | Type |  Owner
--------+----------+------+----------public | emp_view | view | postgres
(1 row)--由于历史原因,ALTER TABLE 也可以用于视图
postgres=# alter table if exists emp_view rename to emp_view2;
ALTER TABLE
postgres=# \dvList of relationsSchema |   Name    | Type |  Owner
--------+-----------+------+----------public | emp_view2 | view | postgres
(1 row)

3.3 删除视图

postgres=# drop view emp_view2;
DROP VIEW

四、可更新视图

  如果一个视图满足以下条件,它就是自动可更新的:

  • 在该视图的 FROM 列表中刚好只有一项,并且它必须是一个表或者另一个可更新视图。
  • 视图定义的顶层不能包含 WITH、DISTINCT、GROUP BY、HAVING、LIMIT 或者 OFFSET 子句。
  • 视图定义的顶层不能包含集合操作(UNION、 INTERSECT 或者 EXCEPT)。
  • 视图的选择列表不能包含任何聚集、窗口函数或者集合返回函数。

  一个更加复杂的不满足所有这些条件的视图默认是只读的:系统将不允许在该视图上的插入、更新或者删除。可以通过在该视图上创建一个 INSTEAD OF 触发器来获得可更新视图的效果,该触发器必须把该视图上的尝试的插入等转换成其他表上合适的动作。

4.1 创建可更新视图

postgres=# create or replace view employees_it as
postgres-# select employee_id,
postgres-# first_name,
postgres-# last_name,
postgres-# email,
postgres-# phone_number,
postgres-# hire_date,
postgres-# job_id,manager_id,
postgres-# department_id
postgres-# from employees where department_id = 60;
CREATE VIEW
postgres=# select * from  employees_it;employee_id | first_name | last_name |  email   | phone_number | hire_date  | job_id  | manager_id | department_id
-------------+------------+-----------+----------+--------------+------------+---------+------------+---------------103 | Alexander  | Hunold    | AHUNOLD  | 590.423.4567 | 2006-01-03 | IT_PROG |        102 |            60104 | Bruce      | Ernst     | BERNST   | 590.423.4568 | 2007-05-21 | IT_PROG |        103 |            60105 | David      | Austin    | DAUSTIN  | 590.423.4569 | 2005-06-25 | IT_PROG |        103 |            60106 | Valli      | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG |        103 |            60107 | Diana      | Lorentz   | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG |        103 |            60
(5 rows)postgres=# insert into employees_it(employee_id, first_name, last_name, email, phone_number, hire_date, job_id,manager_id,department_id)values(207,'Tony','Dong','DONG','590.423.5568','2020-05-06','IT_PROG',
postgres(# 103,60);
INSERT 0 1
postgres=# select * from  employees_it;employee_id | first_name | last_name |  email   | phone_number | hire_date  | job_id  | manager_id | department_id
-------------+------------+-----------+----------+--------------+------------+---------+------------+---------------103 | Alexander  | Hunold    | AHUNOLD  | 590.423.4567 | 2006-01-03 | IT_PROG |        102 |            60104 | Bruce      | Ernst     | BERNST   | 590.423.4568 | 2007-05-21 | IT_PROG |        103 |            60105 | David      | Austin    | DAUSTIN  | 590.423.4569 | 2005-06-25 | IT_PROG |        103 |            60106 | Valli      | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG |        103 |            60107 | Diana      | Lorentz   | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG |        103 |            60207 | Tony       | Dong      | DONG     | 590.423.5568 | 2020-05-06 | IT_PROG |        103 |            60
(6 rows)

4.2 可更新视图数据“丢失”问题

--视图为部门 id 为 60 的数据,部门 id 为 80 的数据可插入成功,但查询不到
postgres=# insert into employees_it(employee_id, first_name, last_name, email, phone_number, hire_date, job_id,manager_id,department_id)values(2000,'Tony','ong','ong','590.423.5568','2020-05-06','IT_PROG',
103,80);
INSERT 0 1
postgres=# select * from  employees_it;employee_id | first_name | last_name |  email   | phone_number | hire_date  | job_id  | manager_id | department_id
-------------+------------+-----------+----------+--------------+------------+---------+------------+---------------103 | Alexander  | Hunold    | AHUNOLD  | 590.423.4567 | 2006-01-03 | IT_PROG |        102 |            60104 | Bruce      | Ernst     | BERNST   | 590.423.4568 | 2007-05-21 | IT_PROG |        103 |            60105 | David      | Austin    | DAUSTIN  | 590.423.4569 | 2005-06-25 | IT_PROG |        103 |            60106 | Valli      | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG |        103 |            60107 | Diana      | Lorentz   | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG |        103 |            60207 | Tony       | Dong      | DONG     | 590.423.5568 | 2020-05-06 | IT_PROG |        103 |            60
(6 rows)

4.3 约束检查避免数据“丢失”

--方式一:创建视图时带约束检查
postgres=# create or replace view employees_it as
postgres-# select employee_id,
postgres-# first_name,
postgres-# last_name,
postgres-# email,
postgres-# phone_number,
postgres-# hire_date,
postgres-# job_id,manager_id,
postgres-# department_id
postgres-# from employees
postgres-# where department_id = 60
postgres-# with check option;
CREATE VIEW--方式二:创建视图后,修改视图增加约束检查
postgres=# alter view if exists employees_it set(check_option = local(employee_id = 60));
ALTER VIEW--增加检查约束后,视图中不允许插入超出约束范围的数据
postgres=# insert into employees_it(employee_id, first_name, last_name, email, phone_number, hire_date, job_id,manager_id,department_id)values(2000,'Tony','ong','ong','590.423.5568','2020-05-06','IT_PROG',
103,80);
ERROR:  new row violates check option for view "employees_it"
DETAIL:  Failing row contains (2000, Tony, ong, ong, 590.423.5568, 2020-05-06, IT_PROG, null, null, 103, 80).

相关文章:

PostgreSql 视图

一、概述 视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。 我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。 优势: 不保存数据,节省空间。减少…...

【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分)

【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分) 前言 Problem:1150 Travelling Salesman Problem (25 分) Tags:模拟 图的遍历 旅行商问题 Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1150 Travell…...

vue生命周期

vue生命周期是什么?Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。我们来看一下官网给的vue生命周期的…...

排查解决Java进程占用内存过高

排查解决Java进程占用内存过高1 在项目部署运行之前1 检查JVM参数设置2 检查代码逻辑3 使用内存分析工具4 检查线程5 调整应用程序的设计7 调整硬件资源2 在项目部署运行之后1 在项目部署运行之前 1 检查JVM参数设置 检查JVM的启动参数设置,包括-Xmx和-Xms参数&am…...

一个基于 LKM 的 Linux 内核级 rootkit 的实现

博客已迁移至:https://gls.show/ GitHub链接 演示Slides overview rootkit是一种恶意软件,攻击者可以在获得 root 或管理员权限后安装它,从而隐藏入侵并保持root权限访问。rootkit可以是用户级的,也可以是内核级的。关于rootk…...

CAN工具 - ValueCAN - 基础介绍(续)

VSpy3(Vehicle Spy 3的简写),作为一个常用的车载总线仿真工具,在车载网络领域也是有非常大的市场,前面也简单介绍过一些简单的功能,今天就再次介绍一些。什么是VSpy3?VSpy3是美国英特佩斯公司下…...

一个Laravel+vue免费开源的基于RABC控制的博客系统

项目介绍 CCENOTE 是一个使用 Vue3 Laravel8 开发的前后端分离的基于RABC权限控制管理的内容管理系统,由于作者本人比较喜欢写作的原因,因此开发了这个项目,后端使用的PHP的Laravel框架,并且整理了数据层与业务层,相…...

从 B 站出发,用 Chrome devTools performance 分析页面如何渲染

页面是如何渲染的?通常会得到“解析 HTML、css 合成 Render Tree,就可以渲染了”的回答。但是具体都做了些什么,却很少有人细说,我们今天就从 Chrome 的性能工具开始,具体看看一个页面是如何进行渲染的,以及…...

Java异常Throwable的分类

1. Exception:程序本身可以捕获并且可以处理的异常 编译时异常:编译期就会检查的异常,若调用的方法中throw了此类异常,则必须进行显式处理处理(用try…catch捕获或者throws向上抛出),否则无法通…...

【mybatis的#和$使用和区别】

MyBatis是一种基于Java的持久层框架,用于将数据库操作和Java对象之间的映射进行处理。在MyBatis中,#和 $ 符号是用于SQL语句中的占位符。 在SQL语句中,#和 $ 符号都表示占位符,但它们的使用方式略有不同: # 符号 #符…...

感知趋势,洞察发展:2023(第十届)趋势与预测大会成功举办

2023年2月23日,运联年会:2023(第十届)趋势与预测大会在深圳机场凯悦酒店成功闭幕。自2014年开始,“运联年会:趋势与预测”已经连续举办九届。这场大会,既是一次行业性的“年终总结”&#xff0c…...

Spring-Aop核心技术

前言spring一直以来都是我们Java开发中最核心的一个技术,其中又以ioc和aop为主要技术,本篇文章主要讲一下aop的核心技术,也就是ProxyFactory技术的使用,而基本的jdk动态代理和cglib代理技术并不涉及,如有需要&#xff…...

webpack常用优化原理剖析

webpack常用优化原理剖析 按需加载代码配置原理CDN加速-externals代码配置GZIP压缩代码配置原理Tree Shaking代码配置原理按需加载 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 代码配置 //定义了一个异步函数,由于函数不调用不执行,所…...

【现在努力还不晚】--MySQL数据库的数据模型

目录 1、关系型数据库(RDBMS) 特点 2、数据模型 在学习MySQL之前要了解一下数据库的数据模型,我们就知道在MySQL当中,数据是如何存储的,我们了解一下概念! 1、关系型数据库(RDBMS&#xff0…...

二手商品交易网站

技术:Java、JSP等摘要:随着科学技术和信息通讯的飞速发展,Internet极大地丰富和改变着我们生活的各个行业。随着Internet的普及应用,人们可以跨越时间和空间的限制,足不出户便能通过网络完成信息交流,而完成…...

第三阶段04-同步请求和异步请求,get/post,Josn,pojo,Session/Cookie,过滤器Filter

文章目录同步请求和异步请求客户端如何发出异步请求自定义模板代码Get和Post请求异步版本的注册和登录商品管理系统(异步版本)商品列表步骤:前后端分离为什么需要前后端分离?为什么以后不再使用同步请求?JSONPOJO会话对象Session如何记住登录状态后端的MVC会话管理Cookie通过…...

Spark学习:spark相似算子解析

spark算子 一、Map、Flatmap和MapPartition二、repartition和coalesce三、reduceByKey和groupByKey四、collect、take和first一、Map、Flatmap和MapPartition 算子作用map接收一个高阶函数f,对每个算子进行f操作flatmap接收一个高阶函数f,对每个元素进行f操作,形成一个大的集合…...

MySQL操作数据表-----------创建数据表(一)

在MySQL中创建数据库完成后,需要使用USE 数据库名的形式指定进行操作的数据库,然后再去执行创建数据表的SQL语句,也可以直接使用数据库名.数据表名的形式创建数据表。 1.创建空数据表 语法格式:CREATE TABLE [IF EXISTS] 表名 &…...

Java “框架 = 注解 + 反射 + 设计模式” 之 注解详解

Java ”框架 注解 反射 设计模式“ 之 注解详解 每博一文案 刹那间我真想令时光停住,好让我回顾自己,回顾失去的年华,缅怀哪个穿一身短小的连衣裙 和瘦窄的短衫的小女孩。让我追悔少年时代,我心灵的愚钝无知,它轻易…...

特斯拉4D雷达方案首次曝光!高阶智驾市场比拼安全冗余

随着L2级智能驾驶进入普及阶段,L3/L4级赛道正在成为各家车企的下一个竞争焦点。背后的最大难题,就是如何在成本可控的前提下,保证足够的安全。 高工智能汽车研究院监测数据显示,2022年度中国市场(不含进出口&#xff…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

CSS | transition 和 transform的用处和区别

省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

LangFlow技术架构分析

🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...