文档章节

【MySQL】Delete,Update连表(left join)删除,更新语法

磊神Ray
 磊神Ray
发布于 2012/03/26 16:39
字数 1253
阅读 11905
收藏 6

       普通的单表更新或删除sql大家肯定滚瓜烂熟,但你有用过连表更新或删除的sql吗, 这个在表间关联来做更新和删除操作非常有用. 本文分表介绍了如何用update ,delete做联表操作的方法, php程序员站 先看mysql update对于联表更新的说明

-------------------------- 

--------------------------

您也可以执行包括多个表的UPDATE操作。table_references子句列出了在联合中包含的表。该语法在13.2.7.1节,“JOIN语法”中进行了说明。以下是一个例子:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
以上的例子显示出了使用逗号操作符的内部联合,但是multiple-table UPDATE语句可以使用在SELECT语句中允许的任何类型的联合,比如LEFT JOIN。

注释:您不能把ORDER BY或LIMIT与multiple-table UPDATE同时使用。

在一个被更改的multiple-table UPDATE中,有些列被引用。您只需要这些列的UPDATE权限。有些列被读取了,但是没被修改。您只需要这些列的SELECT权限。

如果您使用的multiple-table UPDATE语句中包含带有外键限制的InnoDB表,则MySQL优化符处理表的顺序可能与上下层级关系的顺序不同。在此情况下,语句无效并被 回滚。同时,更新一个单一表,并且依靠ON UPDATE功能。该功能由InnoDB提供,用于对其它表进行相应的修改。请参见15.2.6.4节,“FOREIGN KEY约束”。

目前,您不能在一个子查询中更新一个表,同时从同一个表中选择。

---------------------------------------

举例说明:比如我现在有个主文章表,和一个文章附表,主文章表里存放一些文章的title,category分类,添加时间,和更新时间之类的基本信息,附文章表里放文章的内容.

我现在要更新主,附表里id为1的文章内容,我可以执行以下sql:

update a left join b on a.id=b.a_id set a.title='aaaaa',b.body='bbbb' where a.id=1www~phperz~com

再看delete的联表删除 www~phperz~com

mysql手册中的描述

您可以在一个DELETE语句中指定多个表,根据多个表中的特定条件,从一个表或多个表中删除行。不过,您不能在一个多表DELETE语句中使用ORDER BY或LIMIT。

table_references部分列出了包含在联合中的表。此语法在13.2.7.1节,“JOIN语法”中进行了说明。 www~phperz~com

对于第一个语法,只删除列于FROM子句之前的表中的对应的行。对于第二个语法,只删除列于FROM子句之中(在USING子句之前)的表中的对应的行。作用是,您可以同时删除许多个表中的行,并使用其它的表进行搜索:

DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
或:

DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
当搜索待删除的行时,这些语句使用所有三个表,但是只从表t1和表t2中删除对应的行。

以上例子显示了使用逗号操作符的内部联合,但是多表DELETE语句可以使用SELECT语句中允许的所有类型的联合,比如LEFT JOIN。

本语法允许在名称后面加.*,以便与Access相容。

如果您使用的多表DELETE语句包括InnoDB表,并且这些表受外键的限制,则MySQL优化程序会对表进行处理,改变原来的从属关系。在这种情况下,该语句出现错误并返回到前面的步骤。要避免此错误,您应该从单一表中删除,并依靠InnoDB提供的ON DELETE功能,对其它表进行相应的修改。

注释:当引用表名称时,您必须使用别名(如果已给定): php程序员站

DELETE t1 FROM test AS t1, test2 WHERE ...
进行多表删除时支持跨数据库删除,但是在此情况下,您在引用表时不能使用别名。举例说明:phperz~com

DELETE test1.tmp1, test2.tmp2 FROM test1.tmp1, test2.tmp2 WHERE ...
目前,您不能从一个表中删除,同时又在子查询中从同一个表中选择。
------------------------------------

现在我们还对刚才那二个表举例,删除主,附表里id为1的文章内容,我可以执行以下sql:

delete a,b from a left join b on a.id=b.a_id where a.id=1

注意我给加红的地方,如果你只删除多个表中的某个表里的数据,则在delete后面只跟那个表的名子,我举的例子是同时删除a和b中aid=1的数据,也就是同时删二个表的数据. php程序员站

如图:

 

注:本文以是mysql来讲解的,其他的比如sql server ,access,oracle等也有他们各自不同的语法,用时请各位根据手册上的语法自自己摸索. ph

本文转载自:http://www.phperz.com/database/MySQL/0621340120113401.html

磊神Ray
粉丝 84
博文 64
码字总数 34935
作品 0
徐汇
程序员
私信 提问
MySQL(十二)DML数据的增删改

一、DML语言 数据操作语言: 插入:insert 修改:update 删除:delete 二、插入语句insert 2.1、方式一 语法:insert into 表名(字段名,...) values(值,...); 特点: 1、要求值的类型和字段的...

leeqico
2018/05/29
0
0
Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)

ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰   开局一张图 今天接着昨天的说 索引有4种: 普通 索引 :index 唯一索引:unique 主键索引:primary key 外键索引:f...

巴黎香榭
2018/08/02
0
0
Hive学习系列三--语法学习

Hive语法学习 1、hive的表分为外部表、分区表和桶 a、外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中, 而是存放到别处,这样的好处是如果你要删除这个外部表,该...

乔康007
2016/06/15
29
0
《MySQL必知必会》读书笔记(三) 15~21章

1、外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。通过外键查找: SELECT vendname, prodname, pridprice FROM vendors, products WHERE vendors.vendid = produ...

一万
2016/02/07
102
0
好程序员Java教程:SQL语言之视图

好程序员Java教程:SQL语言之视图,前言: 本章我们将学习MySQL中的视图,视图是数据库中的重要组件,本文将从视图是什么,视图的作用,创建和使用视图以及修改视图这些方面讲解视图。 视图是...

好程序员IT
06/21
46
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS盒子模型

一、什么叫框模型 页面元素皆为框(盒子) 定义了元素框处理元素内容,内边距,外边距以及边框的计算方式 二、外边距 围绕在元素边框外的空白距离(元素与元素之间的距离) 语法:margin,定...

wytao1995
今天
4
0
Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部