返回顶部
首页 > 资讯 > 数据库 >mysql中通过关联表update数据的误区测试是怎样的
  • 121
分享到

mysql中通过关联表update数据的误区测试是怎样的

2024-04-02 19:04:59 121人浏览 泡泡鱼
摘要

这篇文章给大家介绍Mysql中通过关联表update数据的误区测试是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 关于update关联表

这篇文章给大家介绍Mysql中通过关联表update数据的误区测试是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

关于update关联表的写法存在很多误区,以前我自己也经常犯错....
一般的写法有如下几种:
update test1 set name =(select name from test2 where test1.id=test2.id);
update test1 a,test2 b set a.name=b.name where a.id=b.id;
update test2 set test2.name=(select name from test1 where test1.id=test2.id) where exists (select * from test1 where test1.id=test2.id);

一般来讲这三种写法都没问题,只要在test1,和test2中name和id字段都是唯一的...
下面我们分别讨论更改表和关联表的情况:
首先,讨论被关联表有重复的情况:

mysql> select * from test1;
+------+------+
| id   | name |
+------+------+
|    1 | k1   |
|    2 | k2   |
|    3 | k3   |
|    4 | kkk  |
|    4 | k4   |
|    4 | k4   |
+------+------+
6 rows in set (0.00 sec)

mysql> select * from test2;
+------+------+
| id   | name |
+------+------+
|    1 | 2222 |
|    2 | 2222 |
|    3 | 2222 |
|    4 | 2222 |
+------+------+
4 rows in set (0.00 sec)


mysql> update test2 set name = (select test1.name from test1 where test1.id=test2.id)   
    -> ;
ERROR 1242 (21000): Subquery returns more than 1 row


mysql> update test2 a,test1 b set a.name=b.name where a.id=b.id;
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from test2;
+------+------+
| id   | name |
+------+------+
|    1 | k1   |
|    2 | k2   |
|    3 | k3   |
|    4 | kkk  |
+------+------+
4 rows in set (0.00 sec)

test1表中id=4的记录有多个...且值也不一致.这个时候将test1做为驱动表,是不可取的..不管用什么语法,要么会报错,要么就会只去驱动表的重复的值的第一个值...




接着讨论被更改表有多余值的情况
多余值是相对于更改条件而言的.比如只更改ID1-4的..而存在id=5的类似的情况;
mysql> select * from test2;
+------+---------+
| id   | name    |
+------+---------+
|    1 | k1      |
|    2 | k2      |
|    3 | k3      |
|    4 | kkk     |
|    5 | gaopeng |
+------+---------+
5 rows in set (0.00 sec)

mysql> select * from test1;
+------+------+
| id   | name |
+------+------+
|    1 | k1   |
|    2 | k2   |
|    3 | k3   |
+------+------+
3 rows in set (0.00 sec)

mysql> update test2 set test2.name=(select name from test1 where test1.id=test2.id);
Query OK, 2 rows affected (0.01 sec)
Rows matched: 5  Changed: 2  Warnings: 0

mysql> select * from test2;
+------+------+
| id   | name |
+------+------+
|    1 | k1   |
|    2 | k2   |
|    3 | k3   |
|    4 | NULL |
|    5 | NULL |
+------+------+
5 rows in set (0.00 sec)


可以看到,如果不加条件的update,会导致多余的数据被更改为null.
mysql> select * from test2;
+------+------+
| id   | name |
+------+------+
|    1 | rrr  |
|    2 | rrr  |
|    3 | rrr  |
|    4 | rrr  |
|    5 | rrr  |
+------+------+
5 rows in set (0.00 sec)


mysql> update test2 set test2.name=(select name from test1 where test1.id=test2.id) where exists (select * from test1 where test1.id=test2.id); 
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from test2;
+------+------+
| id   | name |
+------+------+
|    1 | k1   |
|    2 | k2   |
|    3 | k3   |
|    4 | rrr  |
|    5 | rrr  |
+------+------+
5 rows in set (0.00 sec)


所以要注意关联更改时要注意的条件:
1.驱动表不能有重复值.关联表作为参考值,不能有重复,不然取值时不知道取哪一个值
2.被更改表如有多余值时,一定要加条件,不然,没有被关联到的数据会被更改为null;

关于mysql中通过关联表update数据的误区测试是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: mysql中通过关联表update数据的误区测试是怎样的

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

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

猜你喜欢
  • mysql中通过关联表update数据的误区测试是怎样的
    这篇文章给大家介绍mysql中通过关联表update数据的误区测试是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 关于update关联表...
    99+
    2024-04-02
  • MySQL中update语句的执行过程是怎么样的
    这篇文章主要为大家展示了“MySQL中update语句的执行过程是怎么样的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中update语句的执行过程是...
    99+
    2024-04-02
  • Mysql中关于表的操作是怎样的
    Mysql中关于表的操作是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。创建数据库  createdatabase数据库...
    99+
    2024-04-02
  • mysql数据库误删除后的数据恢复操作过程是怎样的
    这篇文章给大家介绍mysql数据库误删除后的数据恢复操作过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在日常运维工作中,对于mysql数据库的权限的规避,SQL审核优化、数...
    99+
    2024-04-02
  • 通过sysbench工具实现MySQL数据库的性能测试的方法
    1.背景  sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试。sysbench 支持的测试有CPU运算性能测试、内存分配及传输速度测试、磁盘IO性能测试、...
    99+
    2024-04-02
  • MySQL中使用XML数据过程是怎么样的
    这篇文章给大家介绍MySQL中使用XML数据过程是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  在MySQL中使用XML数据可以更好的管理数据,将所有数据进行了格式化,这个...
    99+
    2024-04-02
  • 怎样进行MySQL中的批量初始化数据的对比测试
    本篇文章为大家展示了怎样进行MySQL中的批量初始化数据的对比测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。   一直以来对于MySQL的存储过程性...
    99+
    2024-04-02
  • MySQL查询关联表中不存在的数据NOT EXISTS()
    工作中遇到这样的问题,用户表(t_users)中有属性部门id,所有的部门存在部门表(t_org)中。 由于之前的用户数据是执行sql导入的,导入时没有做校验,现在发现有些用户的所属部门id在t_org表中不存在。 现在要统一排查一下所有这...
    99+
    2023-09-05
    mysql 数据库
  • MySQL中常见的数据表设计误区有哪些
    这篇文章将为大家详细讲解有关MySQL中常见的数据表设计误区有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。误区一:过多的数据列MySQL 存储引擎的 API 是按照行缓冲区方式从服务端和存储引擎复制...
    99+
    2023-06-15
  • mysql数据生成PHP数组文件的过程是怎样的的?
    实际上就是 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件。取mysql数据步骤忽略(1)利用serialize将数组序列化存储为文本文件,调用时候再使用uns...
    99+
    2024-04-02
  • J2ME通过Servlet访问数据库的步骤分别是怎样的
    本篇文章为大家展示了J2ME通过Servlet访问数据库的步骤分别是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。你知道J2ME访问数据库的方式吗,这里向大家...
    99+
    2024-04-02
  • MySQL数据库表设计规范是怎么样的
    小编给大家分享一下MySQL数据库表设计规范是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、数据库设计1、一般都使用 INNODB 存储引擎,除非读写比率<1%,才考虑使...
    99+
    2024-04-02
  • 【记录】mysql使用like匹配数据时关于通配符的使用误区
    -- 此sql中“_”为通配符,匹配任意单字符,所以过滤的数据包含了test开头的数据: select * from live_class where title like 'test_...
    99+
    2024-04-02
  • SpringBoot中Mybatis+Druid数据访问过程是怎样的
    本篇内容主要讲解“SpringBoot中Mybatis+Druid数据访问过程是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中Mybatis+Druid数据访问过程是...
    99+
    2023-06-25
  • 关系数据库系统中使用的数据结构是怎样的
    小编给大家分享一下关系数据库系统中使用的数据结构是怎样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!关系数据库系统中使用的数据结构是二维表。在关系型数据库系统中,所有的数据都采用二维表的...
    99+
    2024-04-02
  • SQL Server数据库中的存储过程是怎么样的
    SQL Server数据库中的存储过程是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是存储过程如果你接触过其他的编程语言,那么就...
    99+
    2024-04-02
  • Linux网络中数据包的接收过程是怎样的
    本篇文章为大家展示了Linux网络中数据包的接收过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的。如果英文没有问题,强...
    99+
    2023-06-16
  • DM7数据复制中表级复制是怎样的
    DM7数据复制中表级复制是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。达梦数据复制(DATA REPLICATION)...
    99+
    2024-04-02
  • mysql中UPDATE语句,关联两张表,将一个表中的字段根据条件更新到另一个表中,不需要子查询
    例如:当contract表中的customer_name等于customer表的name时,将contract表中的customer_id字段更新为customer表的id如果用子查询可能会这样写: UPDATE contract ...
    99+
    2023-09-13
    sql java 数据库
  • MySQL中如何通过一条语句描述数据库中的所有表?
    您可以使用 INFORMATION_SCHEMA.COLUMNS 通过一条语句来描述数据库中的所有表。语法如下。SELECT *FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHE...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作