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

数据库强化(1.视图)

1.什么是视图

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

2.为什么要使用视图

  1. 简化用户对数据的理解,以及简化他们的操作。通过定义视图,可以将经常使用的查询定义为视图,这样用户不必每次都指定全部的条件,只需要select * from view1就可以。
  2. 提高数据安全性。视图是虚拟的,物理上是不存在的,只是存储了数据的集合。同时,用户对视图不可以随意的更改和删除,可以保证数据的安全性。
  3. 逻辑数据独立性。视图可以帮助用户屏蔽真实表结构变化带来的影响。

3.视图的特点

  1. 简单:使用视图时,用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。
  2. 安全:视图的使用限制了用户只能访问他们被允许查询的结果集,对于表的权限管理并不能限制到某个行或者某个列,但通过视图就可以简单的实现。
  3. 数据独立:一旦视图的结构被确定了,可以屏蔽表结构变化对用户的影响。例如源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

4.视图的语法

4.1创建视图

CREATE VIEW view_name AS  
SELECT column1, column2, ...  
FROM table_name  
WHERE condition;

其中,view_name是视图的名称,column1, column2, …是要选择的列名,table_name是要从中选择数据的表名,condition是筛选条件。

例如,创建一个名为view1的视图,选择table1表中的column1和column2列,并筛选出column1值大于等于10的数据,可以使用以下语句:

CREATE VIEW view1 AS  
SELECT column1, column2  
FROM table1  
WHERE column1 >= 10;

创建视图后,可以通过以下语句查看视图中的数据:

SELECT * FROM view1;

这将返回视图view1中的所有行。

4.2在视图上执行DML操作

在视图上执行DML操作与在普通表上执行DML操作类似,可以使用INSERT、UPDATE、DELETE等语句对视图进行操作。但是需要注意的是,视图本身并不存储实际的数据,而是基于其定义的查询语句从源表中选择数据。因此,对视图执行DML操作实际上是对源表执行相应的操作。

以下是在视图上执行DML操作的示例:

SELECT操作
要查询视图中的数据,可以使用SELECT语句。例如,如果要查询名为“view1”的视图中所有列的数据,可以使用以下语句:

SELECT * FROM view1;

这将返回视图“view1”中的所有行和所有列的数据。如果只想查询特定的列,可以在SELECT语句中列出这些列的名称,例如:

SELECT column1, column2 FROM view1;

这将返回视图“view1”中所有行中指定的列的数据。如果需要在查询中使用条件来筛选数据,可以在WHERE子句中添加条件,例如:

SELECT * FROM view1 WHERE column1 > 10;

这将返回视图“view1”中满足条件的行和所有列的数据。

INSERT操作
向视图中插入数据实际上是将数据插入到源表中。例如,向名为view1的视图中插入一条记录,可以使用以下语句:

INSERT INTO view1 (column1, column2) VALUES (value1, value2);

这将在名为view1的视图的源表中插入一条记录,其中column1的值为value1,column2的值为value2。

UPDATE操作
更新视图中数据的实际操作是更新源表中的数据。例如,更新名为view1的视图中column1列的值,可以使用以下语句:

UPDATE view1 SET column1 = new_value WHERE condition;

这将在名为view1的视图的源表中更新满足条件的数据行中的column1列的值为new_value。

DELETE操作
从视图中删除数据的实际操作是删除源表中的数据。例如,从名为view1的视图中删除满足条件的数据行,可以使用以下语句:

DELETE FROM view1 WHERE condition;

这将在名为view1的视图的源表中删除满足条件的数据行。

需要注意的是,对视图执行DML操作时,如果视图定义中包含WHERE子句或其他筛选条件,则必须满足这些条件才能对源表执行相应的操作。此外,如果视图是基于多个表连接或其他复杂查询定义的,则需要注意DML操作对源表之间数据一致性和完整性的影响。

4.3视图实例

下面是一个关于员工信息的视图实例:

  1. 首先,假设我们有一个名为 “employees” 的表,其中包含以下字段:员工 ID(employee_id)、姓名(name)、年龄(age)、部门(department)。
  2. 创建一个视图,名为 “active_employees”,用于查询在职员工的信息。视图的 SQL 语句如下:
CREATE OR REPLACE VIEW active_employees AS  
SELECT employee_id, name, age, department  
FROM employees  
WHERE status = 'ACTIVE';  

在这个视图中,我们筛选了 “employees” 表中状态为 “ACTIVE” 的员工,将其呈现为在职员工的信息。
3. 接下来,为了提高数据安全性,我们只允许特定用户查询 “active_employees” 视图。首先,创建一个具有较高权限的用户,例如:

CREATE USER manager IDENTIFIED BY manager_password;  

然后,授权该用户具有创建、查询、更新和删除 “active_employees” 视图的权限:

GRANT CREATE, SELECT, UPDATE, DELETE ON active_employees TO manager;  
  1. 最后,其他用户可以通过查询 “active_employees” 视图来获取在职员工的信息,而无需直接查询 “employees” 表。这样,我们既提高了数据安全性,又简化了查询过程。
    注意:在实际应用中,视图的使用需谨慎,因为视图的数据与对应表数据互相关联。在操作视图时,务必确保了解相关表的结构和数据,以免造成错误或丢失数据。同时,为了优化查询性能,可以考虑使用同义词来进一步简化查询过程。

相关文章:

数据库强化(1.视图)

1.什么是视图 视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的…...

Mysql与SeaweedFS数据不同步问题产生原因及解决办法

文章目录 Mysql与SeaweedFS数据不同步问题的探究与解决问题背景原因探究不一致的写操作缺乏事务管理 解决方案引入分布式事务处理使用消息队列 实践演示(python代码)结论 Mysql与SeaweedFS数据不同步问题的探究与解决 问题背景 在数据库和文件存储系统…...

Kotlin apply和with用法和区别

apply apply 是 Kotlin 标准库中的一个函数&#xff0c;它允许你在对象上执行一系列操作&#xff0c;然后返回该对象自身。它的语法结构如下&#xff1a; fun <T> T.apply(block: T.() -> Unit): T这个函数接受一个 lambda 表达式作为参数&#xff0c;该 lambda 表达…...

springboot通过aop自定义注解@Log实现日志打印

springboot通过aop自定义注解Log实现日志打印 文章目录 效果图实操步骤1.引入依赖2.自定义日志注解3.编写日志切面类4.UserController5.运行 效果图 实操步骤 注意&#xff0c;本代码在springboot环境下运行&#xff0c;jdk1.8 1.引入依赖 <dependency><groupId>…...

k8spod详解其二

一&#xff0c;资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为…...

golang包的管理

Go语言中包的使用 Go语言使用包&#xff08;package&#xff09;这种语法元素来组织源码&#xff0c;所有语法可见性均定义在package这个级别&#xff0c;与Java 、python等语言相比&#xff0c;这算不上什么创新&#xff0c;但与C传统的include相比&#xff0c;则是显得“先进…...

Windows10安装Anaconda与Pytorch的记录

这是一篇关于安装Anaconda和Pytorch的记录与复盘&#xff0c;写的原因是我电脑恢复系统之后东西全没了&#xff0c;再装Pytorch的时候一脸懵逼忘了怎么弄了&#xff0c;写篇记录以备我下一次安装。 1、Anaconda的安装 1.1、Anaconda安装包下载 下载链接: Free Download | An…...

图解Kafka高性能之谜(五)

高性能的多分区、冗余副本集群架构 高性能网络模型NIO 简单架构设计&#xff1a; 详细架构设计&#xff1a; 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引&#xff1a; 高响应的磁盘拷贝技术 kafka采用sendFile()的…...

opencv在linux上调用usb摄像头进行拍照

功能 1.按照指定的文件名创建文件夹&#xff0c;创建之前判断该文件夹是否存在 2.调用摄像头按可调整窗口大小的方式显示 3.按esc退出摄像头画面 4.按p保存当前摄像头的画面&#xff0c;并按当前时间为照片的名字进行保存打开终端查看是否有摄像头 ls /dev/video*一般video1就…...

软考之知识产品+例题

知识产权 保护期限 公民作品 没有限制 署名权、修改权、保护作品完整权 作者终生及其死亡后的第 50 年的 12月31日 发表权、使用权、获得报酬权 单位作品 首次发表后的第 50 年的 12月31 日&#xff0c;若未发表则不受保护 发表权、使用权、获得报酬权 公民软件作品 没…...

玩了一下 Jenkins,最新版本 + JDK11

背景 今年五月的时候玩了一下 Jenkins&#xff0c;最新版本 2.414.3 &#xff0c;JDK 11 。本机有两个 JDK&#xff0c;只放到 Tomcat 里面了&#xff0c;看到了一个启动页面&#xff0c;后面有其他事情就忘记了。最近又想起来&#xff0c;觉得还是应该玩一下这么有技术含量的…...

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN&#xff0c;对图片进行分类并使用图片进行测试模型-适合入门&#xff0c;从模型到训练再到测试&#xff1a;开源项目 开源项目完整代码及基础教程&#xff1a; https://mbd.pub/o/bread/ZZWclp5x CNN模型&#xff1a; 1.导入必要的库和模块&…...

C# 使用.NET的SocketAsyncEventArgs实现高效能多并发TCPSocket通信

简介&#xff1a; SocketAsyncEventArgs是一个套接字操作得类&#xff0c;主要作用是实现socket消息的异步接收和发送&#xff0c;跟Socket的BeginSend和BeginReceive方法异步处理没有多大区别&#xff0c;它的优势在于完成端口的实现来处理大数据的并发情况。 BufferManager类…...

设计模式——观察者模式(Observer Pattern)+ Spring相关源码

文章目录 一、观察者模式定义二、例子2.1 菜鸟教程例子2.1.1 定义观察者2.1.2 定义被观察对象2.1.3 使用 2.2 JDK源码 —— Observable2.2.1 观察者接口Observer2.2.1 被观察者对象Observable 2.3 Spring源码 —— AbstractApplicationContext2.3.1 观察者2.3.2 被观察者 2.3 G…...

openpnp - code review - 开机对话框历史记录和贡献者名单

文章目录 openpnp - code review - 开机对话框历史记录和贡献者名单概述笔记D:\my_openpnp\openpnp_dev_2022_0801\src\main\java\org\openpnp\gui\AboutDialog.javaEND openpnp - code review - 开机对话框历史记录和贡献者名单 概述 偶然发现, 自己打包后的openpnp, 开机后…...

JavaSE22——HashMap

集合框架_HashMap 一、概述 HashMap 是用于存储 Key-Value 键值对的集合。 &#xff08;1&#xff09;HashMap 根据键的 hashCode 值存储数据&#xff0c;大多数情况下可以直接定位到它的值&#xff0c;所以具有很快的访问速度&#xff0c;但遍历顺序不确定。 &#xff08;2&…...

「图像 merge」无中生有制造数据

在进行一个新项目的时候&#xff0c;往往缺少一些真实数据&#xff0c;导致没办法进行模型训练&#xff0c;这时候就需要算法工程师自行制作一些数据了&#xff0c;比如这篇文章分享的 bag 目标检测&#xff0c;在检测区域没有真实的 bag数据 此时&#xff0c;就可以采用图像拼…...

RK3588之ArmSoM-W3 + MPP实现多路硬解码拉流

简介 学习完MPP的解码Demo之后&#xff0c;想必大家都想通过一个项目来进行RK3588-MPP的解码实战。本篇文章就基于ArmSoM-W3开发板&#xff0c;开发一个多路硬解码项目&#xff0c;实现四路MPP硬解码拉流显示实现的效果如下&#xff1a; RK3588四路MPP硬解码拉流 环境介绍 硬件…...

【Rust日报】2023-10-29 隆重推出 Rerun 0.10!

Lapce代码编辑器发布v0.3.0 Lapce代码编辑器新发布v0.3.0&#xff01; https://lapce.dev/ 距离我们上次发布已经过去很长一段时间了。我们正忙着在自己的 UI 工具包Floem中重写 Lapce &#xff0c;这将使我们以后对 UI 部分代码的开发变得更容易、更快。 另一件值得注意的事情…...

AI智能识别如何助力PDF,轻松实现文档处理?

AI智能识别如何助力PDF&#xff0c;轻松实现文档处理&#xff1f; 随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域都发挥着重要的作用。其中&#xff0c;文档智能&#xff08; Document AI &#xff09;在金融、医疗、教育、保险、能源、物流等…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...