MYSQL多表更新删除以及和ORACLE的对比

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MYSQL多表更新操作, 一般来说这类操作可以用IN和NOT IN,至少在ORACLE中可以这样做,ORACLE对IN和NOT IN的优化程度很高 一般使用SEMI JOIN和ANTI JOIN进行半连接,抛弃不需要的行,但是MYSQL在这方面性能还是有一些问题, 所以建议使用连接的方式如下,对于联合UPDATE ORACLE可以使用MERGE来代替比如 update a,b set a.name=b.name where a.id=b.id; ORACLE是没有这种语法的,一句话MYSQL的连接查询在ORACLE中都可以有相应的代替。
MYSQL多表更新操作,
一般来说这类操作可以用IN和NOT IN,至少在ORACLE中可以这样做,ORACLE对IN和NOT IN的优化程度很高
一般使用SEMI JOIN和ANTI JOIN进行半连接,抛弃不需要的行,但是MYSQL在这方面性能还是有一些问题,
所以建议使用连接的方式如下,对于联合UPDATE ORACLE可以使用MERGE来代替比如
update a,b set a.name=b.name where a.id=b.id;
ORACLE是没有这种语法的,一句话MYSQL的连接查询在ORACLE中都可以有相应的代替。


1、先建立2个测试表
mysql> create table  del1 (id int,name varchar(20));
Query OK, 0 rows affected (0.49 sec)


mysql> create table del2 (id int,name varchar(20));
Query OK, 0 rows affected (0.02 sec)
2、插入测试数据
mysql> select * from del1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | gaopeng  |
|    2 | gaopeng2 |
|    3 | gaopeng3 |
+------+----------+
3 rows in set (0.04 sec)


mysql> select * from del2;
+------+---------+
| id   | name    |
+------+---------+
|    1 | yanlei  |
|    4 | yanlei4 |
|    2 | yanlei2 |
+------+---------+
3 rows in set (0.00 sec)
3、进行删除操作
 1)删除匹配行的操作
 delete del1  from del1,del2 where del1.id=del2.id;
 
mysql> select * from del1;
+------+----------+
| id   | name     |
+------+----------+
|    3 | gaopeng3 |
+------+----------+
对于这类操作ORACLE使用IN进行代替


 2)删除不匹配的行
 
mysql>  delete del1  from del1 left join del2  on  del1.id=del2.id where  del2.id is null;
Query OK, 1 row affected (0.00 sec)


mysql> select * from del1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | gaopeng  |
|    2 | gaopeng2 |
+------+----------+
2 rows in set (0.00 sec)
对于这类操作ORACLE使用NOT IN进行代替
 3)同时删除2表中匹配的行
mysql>  delete del1,del2  from del1,del2 where del1.id=del2.id;
Query OK, 4 rows affected (0.04 sec)


mysql> select * from del1;
+------+----------+
| id   | name     |
+------+----------+
|    3 | gaopeng3 |
+------+----------+
1 row in set (0.00 sec)


mysql> select * from del2;
+------+---------+
| id   | name    |
+------+---------+
|    4 | yanlei4 |
+------+---------+
1 row in set (0.00 sec)


对于这类操作ORACLE使用分别删除进行代替。


4、进行更新操作 
  一般来说UPDATE只会连接表进行联合更新,而不会有不匹配的情况发生所以如下:
  mysql> update del1,del2 set del1.name=del2.name where del1.id=del2.id;
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0


mysql> select * from del1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | yanlei   |
|    2 | yanlei2  |
|    3 | gaopeng3 |
+------+----------+
3 rows in set (0.00 sec)


mysql> select * from del2;
+------+---------+
| id   | name    |
+------+---------+
|    1 | yanlei  |
|    4 | yanlei4 |
|    2 | yanlei2 |
+------+---------+
3 rows in set (0.00 sec)


对于这类操作ORACLE中使用MERGE进行代替
 
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Oracle 关系型数据库 MySQL
mysql数据库和Oracle的区别
mysql数据库和Oracle的区别
50 1
|
4月前
|
SQL Oracle 关系型数据库
Oracle之你知道哪几种多表Insert的方式?
Oracle之你知道哪几种多表Insert的方式?
33 0
|
30天前
|
Oracle 关系型数据库 MySQL
Seata常见问题之oracle 数据库 报 just support mysql如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
53 0
|
3月前
|
SQL 存储
MySQL-多表联合查询
MySQL-多表联合查询
|
3月前
|
SQL 数据库
MySQL-多表连接查询
MySQL-多表连接查询
|
4月前
|
SQL Oracle 关系型数据库
选择适合您网站的 SQL 托管:MS SQL Server、Oracle、MySQL 和 MS Ac
如果您希望您的网站能够存储和检索数据,您的Web服务器应该能够访问使用SQL语言的数据库系统。以下是一些常见的SQL托管选项:
51 1
|
4月前
|
SQL Oracle 关系型数据库
浅谈对数据库(MySQL、Oracle、SQL Server)的认识
浅谈对数据库(MySQL、Oracle、SQL Server)的认识
|
4月前
|
存储 Oracle 关系型数据库
百度搜索:蓝易云【oracle dblink mysql查询text无法显示问题】
通过使用 `DBMS_HS_PASSTHROUGH` 包执行 MySQL 查询并返回 CLOB 类型结果,可以解决 Oracle 数据库中无法直接显示 MySQL TEXT 类型数据的问题。
46 0
|
4月前
|
SQL Oracle 关系型数据库
选择适合您网站的 SQL 托管:MS SQL Server、Oracle、MySQL
如果您希望您的网站能够存储和检索数据,您的Web服务器应该能够访问使用SQL语言的数据库系统。以下是一些常见的SQL托管选项:
56 2
|
16天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)

推荐镜像

更多