溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中增刪改查語法的示例分析

發(fā)布時間:2022-01-19 11:23:04 來源:億速云 閱讀:147 作者:小新 欄目:數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)MySQL中增刪改查語法的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

普通的單表更新或刪除sql大家肯定滾瓜爛熟,但你有用過連表更新或刪除的sql嗎, 這個在表間關(guān)聯(lián)來做更新和刪除操作非常有用. 

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

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

您也可以執(zhí)行包括多個表的UPDATE操作。table_references子句列出了在聯(lián)合中包含的表。該語法在13.2.7.1節(jié),“JOIN語法”中進行了說明。以下是一個例子:

UPDATE items,month SET items.price=month.price

WHERE items.id=month.id;

以上的例子顯示出了使用逗號操作符的內(nèi)部聯(lián)合,但是multiple-table UPDATE語句可以使用在SELECT語句中允許的任何類型的聯(lián)合,比如LEFT JOIN。

注釋:您不能把ORDER BY或LIMIT與multiple-table UPDATE同時使用。

在一個被更改的multiple-table UPDATE中,有些列被引用。您只需要這些列的UPDATE權(quán)限。有些列被讀取了,但是沒被修改。您只需要這些列的SELECT權(quán)限。

如果您使用的multiple-table UPDATE語句中包含帶有外鍵限制的InnoDB表,則MySQL優(yōu)化符處理表的順序可能與上下層級關(guān)系的順序不同。在此情況下,語句無效并被 回滾。同時,更新一個單一表,并且依靠ON UPDATE功能。該功能由InnoDB提供,用于對其它表進行相應(yīng)的修改。請參見15.2.6.4節(jié),“FOREIGN KEY約束”。

目前,您不能在一個子查詢中更新一個表,同時從同一個表中選擇。

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

舉例說明:比如我現(xiàn)在有個主文章表,和一個文章附表,主文章表里存放一些文章的title,category分類,添加時間,和更新時間之類的基本信息,附文章表里放文章的內(nèi)容.

我現(xiàn)在要更新主,附表里id為1的文章內(nèi)容,我可以執(zhí)行以下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的聯(lián)表刪除 www~phperz~com

mysql手冊中的描述

您可以在一個DELETE語句中指定多個表,根據(jù)多個表中的特定條件,從一個表或多個表中刪除行。不過,您不能在一個多表DELETE語句中使用ORDER BY或LIMIT。

table_references部分列出了包含在聯(lián)合中的表。此語法在13.2.7.1節(jié),“JOIN語法”中進行了說明。 www~phperz~com

對于第一個語法,只刪除列于FROM子句之前的表中的對應(yīng)的行。對于第二個語法,只刪除列于FROM子句之中(在USING子句之前)的表中的對應(yīng)的行。作用是,您可以同時刪除許多個表中的行,并使用其它的表進行搜索:

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;

當(dāng)搜索待刪除的行時,這些語句使用所有三個表,但是只從表t1和表t2中刪除對應(yīng)的行。

以上例子顯示了使用逗號操作符的內(nèi)部聯(lián)合,但是多表DELETE語句可以使用SELECT語句中允許的所有類型的聯(lián)合,比如LEFT JOIN。

本語法允許在名稱后面加.*,以便與Access相容。

如果您使用的多表DELETE語句包括InnoDB表,并且這些表受外鍵的限制,則MySQL優(yōu)化程序會對表進行處理,改變原來的從屬關(guān)系。在這種情況下,該語句出現(xiàn)錯誤并返回到前面的步驟。要避免此錯誤,您應(yīng)該從單一表中刪除,并依靠InnoDB提供的ON DELETE功能,對其它表進行相應(yīng)的修改。

注釋:當(dāng)引用表名稱時,您必須使用別名(如果已給定): php程序員站

DELETE t1 FROM test AS t1, test2 WHERE ...

進行多表刪除時支持跨數(shù)據(jù)庫刪除,但是在此情況下,您在引用表時不能使用別名。舉例說明:phperz~com

DELETE test1.tmp1, test2.tmp2 FROM test1.tmp1, test2.tmp2 WHERE ...

目前,您不能從一個表中刪除,同時又在子查詢中從同一個表中選擇。

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

現(xiàn)在我們還對剛才那二個表舉例,刪除主,附表里id為1的文章內(nèi)容,我可以執(zhí)行以下sql:

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

注意我給加紅的地方,如果你只刪除多個表中的某個表里的數(shù)據(jù),則在delete后面只跟那個表的名子,我舉的例子是同時刪除a和b中aid=1的數(shù)據(jù),也就是同時刪二個表的數(shù)據(jù). php程序員站

如圖:

MySQL中增刪改查語法的示例分析 

注:本文以是mysql來講解的,其他的比如sql server ,access,oracle等也有他們各自不同的語法,用時請各位根據(jù)手冊上的語法自自己摸索. 

感謝各位的閱讀!關(guān)于“MySQL中增刪改查語法的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI