MySQL中增删改查语法的示例分析

75次阅读
没有评论

共计 2295 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章给大家分享的是有关 MySQL 中增删改查语法的示例分析的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

普通的单表更新或删除 sql 大家肯定滚瓜烂熟, 但你有用过连表更新或删除的 sql 吗, 这个在表间关联来做更新和删除操作非常有用. 

————————– 

————————–

您也可以执行包括多个表的 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 等也有他们各自不同的语法, 用时请各位根据手册上的语法自自己摸索. 

感谢各位的阅读!关于“MySQL 中增删改查语法的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计2295字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)