iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql如何确保视图的一致性
  • 377
分享到

mysql如何确保视图的一致性

2024-04-02 19:04:59 377人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“Mysql如何确保视图的一致性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何确保视图的一致性”这篇文章吧。具体如下:我们

这篇文章主要为大家展示了“Mysql如何确保视图的一致性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何确保视图的一致性”这篇文章吧。

具体如下:

我们有的时候,会创建一个视图来显示表的部分数据。我们知道,简单视图是的,因此可以更新通过视图不可见的数据,但是此更新会使的视图不一致。为了确保视图的一致性,在创建或修改视图时使用WITH CHECK OPTioN可更新子句。我们来看下WITH CHECK OPTION可更新子句的语法结构:

CREATE OR REPLACE VIEW view_name 
AS
 select_statement
 WITH CHECK OPTION;

我们要注意,将分号(;)放在WITH CHECK OPTION子句的末尾,而不是在select语句的末尾来定义视图。完事我们来尝试根据employees表创建一个名为vps的视图,以显示其职位为VP的员工,例如VP Marketing和 VP Sales:

CREATE OR REPLACE VIEW vps AS
  SELECT 
    employeeNumber,
    lastname,
    firstname,
    jobtitle,
    extension,
    email,
    officeCode,
    reportsTo
  FROM
    employees
  WHERE
    jobTitle LIKE '%VP%';

接下来,我们使用以下语句从vps视图中查询数:

mysql> SELECT * FROM vps;
+----------------+----------+-----------+--------------+-----------+----------------------+------------+-----------+
| employeeNumber | lastname | firstname | jobtitle   | extension | email        | officeCode | reportsTo |
+----------------+----------+-----------+--------------+-----------+----------------------+------------+-----------+
|      1056 | Hill   | Mary   | VP Sales   | x4611   | mary.hill@yiibai.com | 1     |   1002 |
|      1076 | Firrelli | Jeff   | VP Marketing | x9273   | jfirrelli@yiibai.com | 1     |   1002 |
+----------------+----------+-----------+--------------+-----------+----------------------+------------+-----------+
2 rows in set

因为vps是一个简单的视图,因此它是可更新的,所以,我们通过vps视图将一行员工数据信息插入:

INSERT INTO vps(employeeNumber,firstname,lastname,jobtitle,extension,email,officeCode,reportsTo)
values(1703,'Lily','Bush','IT Manager','x9111','lilybush@yiiibai.com',1,1002);

我们要注意,新创建的员工通过vps视图不可见,因为她的职位是IT经理,而不是VP。使用以下SELECT语句来验证它:

SELECT * FROM employees WHERE employeeNumber=1703;

执行上面语句,得到以下结果:

+----------------+-----------+-----------+-----------+-----------------------+------------+-----------+----------------------+
| employeeNumber | lastName | firstName | extension | email         | officeCode | reportsTo | jobTitle       |
+----------------+-----------+-----------+-----------+-----------------------+------------+-----------+----------------------+
|      1703 | Bush   | Lily   | x9111   | lilybush@yiiibai.com | 1     |   1002 | IT Manager      |
|      1702 | Gerard  | Martin  | x2312   | mgerard@gmail.com   | 4     |   1102 | Sales Rep      |
|      1625 | Kato   | Yoshimi  | x102   | ykato@gmail.com    | 5     |   1621 | Sales Rep      |
|      1621 | Nishi   | Mami   | x101   | mnishi@gmail.com   | 5     |   1056 | Sales Rep      |

但这可能不是我们想要的,因为通过vps视图暴露VP员工,而不是其他员工,所以,为了确保视图的一致性,用户只能显示或更新通过视图可见的数据,则在创建或修改视图时使用WITH CHECK OPTION:

CREATE OR REPLACE VIEW vps AS
  SELECT 
    employeeNumber,
    lastname,
    firstname,
    jobtitle,
    extension,
    email,
    officeCode,
    reportsTo
  FROM
    employees
  WHERE
    jobTitle LIKE '%VP%' 
WITH CHECK OPTION;

我们要注意在CREATE OR REPLACE语句的结尾处加上WITH CHECK OPTION子句,完事再次通过vps视图将一行插入employees表中,如下所示:

INSERT INTO vps(employeeNumber,firstname,lastname,jobtitle,extension,email,officeCode,reportsTo)
VALUES(1704,'John','Minsu','IT Staff','x9112','johnminsu@yiibai.com',1,1703);

这时mysql会拒绝插入并发出以下错误消息:

Error Code: 1369 - CHECK OPTION failed 'luyaran.vps'

我们可以通过vps视图将一个职位为SVP Marketing的员工插入employees表,看看mysql是否允许这样做:

INSERT INTO vps(employeeNumber,firstname,lastname,jobtitle,extension,email,officeCode,reportsTo)
VALUES(1704,'John','Minsu','SVP Marketing','x9112','johnminsu@classicmodelcars.com',1,1076);

mysql发出1行受影响(Query OK, 1 row affected),我们可以通过根据vps视图查询数据来再次验证插入操作:

SELECT * FROM vps;

如上查询结果所示,它的确按预期工作了:

mysql> SELECT * FROM vps;
+----------------+----------+-----------+---------------+-----------+--------------------------------+------------+-----------+
| employeeNumber | lastname | firstname | jobtitle   | extension | email             | officeCode | reportsTo |
+----------------+----------+-----------+---------------+-----------+--------------------------------+------------+-----------+
|      1056 | Hill   | Mary   | VP Sales   | x4611   | mary.hill@yiibai.com      | 1     |   1002 |
|      1076 | Firrelli | Jeff   | VP Marketing | x9273   | jfirrelli@yiibai.com      | 1     |   1002 |
|      1704 | Minsu  | John   | SVP Marketing | x9112   | johnminsu@classicmodelcars.com | 1     |   1076 |
+----------------+----------+-----------+---------------+-----------+--------------------------------+------------+-----------+
3 rows in set

以上是“mysql如何确保视图的一致性”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: mysql如何确保视图的一致性

本文链接: https://www.lsjlt.com/news/59637.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql如何确保视图的一致性
    这篇文章主要为大家展示了“mysql如何确保视图的一致性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何确保视图的一致性”这篇文章吧。具体如下:我们...
    99+
    2022-10-18
  • MySQL视图在哪些地方可能会不一致,如何保证它们的一致性?
    在可更新视图的情况下,我们很可能更新通过视图不可见的数据,因为我们创建的视图仅显示表的部分数据。这种更新使得视图不一致。我们在创建或修改视图时可以通过使用WITH CHECK OPTION来保证视图的一致性。虽然WITH CHECK OPT...
    99+
    2023-10-22
  • 一段话系列-mysql一致性视图中的当前读
    mysql的innob引擎使用一致性视图(版本控制)来保证事务之间的隔离性,但是在业务中会有这样的清秀,一个字段值为3,在两个同时开启的事务中分别使用update语句进行-1,两个事务分别提交后,该字段的值不是2,而是1;有人会疑惑inno...
    99+
    2018-06-18
    一段话系列-mysql一致性视图中的当前读
  • 如何让电脑中的文件夹视图保持一致
    这篇文章主要介绍“如何让电脑中的文件夹视图保持一致”,在日常操作中,相信很多人在如何让电脑中的文件夹视图保持一致问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何让电脑中的文件夹视图保持一致”的疑惑有所帮助!...
    99+
    2023-06-27
  • Redis与MySQL双写一致性如何保证
    🔔什么是双写一致性 指的是当我们更新了数据库的数据之后redis中的数据 也要同步去更新。使用redis读取数据的流程,当用户访问数据的时候,会先从缓存中读取数据,如果命中缓存的话,那...
    99+
    2023-09-13
    redis mysql 缓存
  • Redis 和 MySQL 如何保持数据一致性?
    在高并发的场景下,大量的请求直接访问MySQL很容易造成性能问题。所以,我们都会用Redis来做数据的缓存,削减对数据库的请求。但是,MySQL和Redis是两种不同的数据库,如何保证不同数据库之间数据的一致性就非常关键了。 一、导致...
    99+
    2023-09-16
    mysql redis
  • MySQL和Redis如何保证数据一致性
    MySQL与Redis都是常用的数据存储和缓存系统。为了提高应用程序的性能和可伸缩性,很多应用程序将MySQL和Redis一起使用,其中MySQL作为主要的持久存储,而Redis作为主要的缓存。在这种情况下,应用程序需要确保MySQL和Re...
    99+
    2023-08-22
    mysql redis 数据库
  • Linux 上的 PHP 框架同步:如何确保数据一致性?
    对于运行在 Linux 上的 PHP 应用程序,框架同步是一个非常重要的问题。在多个服务器上运行的应用程序需要确保数据的一致性,同时还需要满足高可用性的要求。在这篇文章中,我们将探讨如何确保 PHP 应用程序的数据一致性。 一、使用 Re...
    99+
    2023-09-18
    同步 linux 框架
  • MySQL保证数据一致性的方式
    这篇文章主要讲解了“MySQL保证数据一致性的方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL保证数据一致性的方式”吧!一、MySQL事务模型A...
    99+
    2022-10-18
  • redis与mysql保持一致性的方法
    redis与mysql保持一致性的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!  redis与mysql保...
    99+
    2022-10-18
  • 聊一聊Redis与MySQL双写一致性如何保证
    1 什么是一致性? 一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性: 这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是...
    99+
    2022-11-12
  • MySQL如何保证备份数据的一致性详解
    目录前言1. 全库只读2. 全局锁3. 事务4. 小结前言 为了数据安全,数据库需要定期备份,这个大家都懂,然而数据库备份的时候,最怕写操作,因为这个最容易导致数据的不一致,松哥举一...
    99+
    2022-11-13
  • MySQL与Redis如何保证数据一致性详解
    前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用,在读取缓存这方面基本都是一致的,大概都是按照下图的流程进行操作: 但是在更新缓存方面,是更新完数据库再更新缓存还是直接删...
    99+
    2022-11-12
  • rabbitmq如何保证数据的一致性
    RabbitMQ 通过以下方式来保证数据的一致性: 事务: RabbitMQ 支持事务机制,可以将多条消息发送到队列中原子操作。...
    99+
    2023-10-26
    rabbitmq
  • PHP和NPM:如何在分布式环境中确保代码的一致性?
    随着互联网的发展,分布式系统越来越普遍,如何确保在不同的机器上运行的代码的一致性成为了一个非常重要的问题。在本文中,我们将探讨如何使用PHP和NPM来确保代码在分布式环境中的一致性。 PHP是一种常用的服务器端脚本语言,而NPM是一个流行...
    99+
    2023-08-13
    npm path 分布式
  • 怎样保证mysql和redis的双写一致性
    这篇文章将为大家详细讲解有关怎样保证mysql和redis的双写一致性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、场景:...
    99+
    2022-10-19
  • MySQL怎么保证备份数据的一致性
    这篇文章主要讲解了“MySQL怎么保证备份数据的一致性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL怎么保证备份数据的一致性”吧!前言为了数据安全,数据库需要定期备份,这个大家都懂...
    99+
    2023-06-30
  • Java业务中台确保数据一致性的解决方案
    目录引言数据一致性原理预备知识1、本地事务2、分布式事务(1)一个事务中包含了多数据库操作(2)一个事务中包含了多服务访问同一数据库(3)一个事务包含了多个微服务调用数据不一致引发的...
    99+
    2022-11-12
  • 如何理解MySQL的一致性读
    如何理解MySQL的一致性读,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 前言   ...
    99+
    2022-10-19
  • 浅谈如何保证Mysql主从一致
    目录binlog的三种格式对比为什么会有mixed格式的binlog? 循环复制问题小结       ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作