您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(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來講解的,其他的比如sql server ,access,oracle等也有他們各自不同的語法,用時請各位根據(jù)手冊上的語法自自己摸索.
感謝各位的閱讀!關(guān)于“MySQL中增刪改查語法的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(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)容。