日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入update语句(延伸学习)

發(fā)布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入update语句(延伸学习) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

常常使用的到了更新操作。學習后,知道了update還有其他一些用法,以前并不知道。現(xiàn)在進行總結

一、update后面使用order by的情況

什么時候有必要增加order by:假如一個表中有自增型或者唯一鍵id。當想實現(xiàn)對所有id都加一。就會用到類似如下的sql:

update teams set teamno=teamno+1
此時就會出現(xiàn)問題,假如有兩行數(shù)據(jù),一行的teamno=6,另一行的teamno=7。當執(zhí)行teamno=teamno+1語句,6的值加上1變成7,但是還存在teamno=7的一行,那么就會出現(xiàn)重復而報錯。解決辦法是,
先讓teamno=7的行執(zhí)行更新,然后才讓teamno=6的行執(zhí)行更新。這樣就不會出現(xiàn)重復沖突情況。使用 order by可以指定更新的順序。

sql語句修改為:update teams set teamno=teamno+1 order by teamno desc

成功運行。

總結:因為主鍵,unique都會要求值是唯一的。更新會出現(xiàn)值重復錯誤。所以只有針對字段值限制是唯一的時候,使用update才有必要添加order by



二、update交換列值的測試:
sql語句? update teams set playerno=division,division=playerno where teamno=129

結果:兩個字段的值變?yōu)橐粯恿恕?br />
結論:按照順序去執(zhí)行,先執(zhí)行了playerno=division。后面執(zhí)行division=playerno的時候,因為前面playerno導致的值已經(jīng)改變了,因而不是過去的值,將最新的playerno的值賦給了division。結果,我們

看到兩個字段的值變成一樣了。

三、update 更新多表的實踐:


update players as p,teams as t set p.name='測試update更新多表',t.playerno='測試多表更新'? where p.name='個人各個' and t.playerno='jgjgg'

執(zhí)行上面語句結果:由于 t.playerno='jgjgg'找不到對于的行,因而這個update語句沒有執(zhí)行set子句的操作。

是通過where條件來保證,兩次update操作視為一個事務保持完整性。

完全可以分成兩次update,如果分解成兩個步驟就是:
update players as p set p.name='測試update更新多表'? where p.name='個人各個'

update teams as t set t.playerno='測試多表更新' where t.playerno='jgjgg'

也是可以完成上面的操作。

使用多表更新的方式有什么好處?

在多表更新語法中,多次update操作視為一個事務保持完整性,只要其中一個更新失敗。那么其他的更新是不會執(zhí)行的。比如上面的測試結果就說明這點了。

歸納為:sql語句更簡潔。操作更加安全。

?

?

不正確之處,歡迎指正!

轉載于:https://www.cnblogs.com/wangtao_20/archive/2011/02/23/1962148.html

總結

以上是生活随笔為你收集整理的深入update语句(延伸学习)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。