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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【牛腩】总结

發布時間:2023/12/20 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【牛腩】总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

知識點一:

using?(cmd = new?SqlCommand("insert into category(name) values('@caName')",GetConn())

注意這個沒有分奧,然后和if 語句一樣,當滿足條件的時候,運行代碼塊中的內容。

?

?

知識點二:

建表注意事項:

對于建表大家都不陌生,這里主要說明一下幾點注意實現:

1、大數據字段最好剝離出單獨的表,以便影響性能

2、使用varchar,代替char,這是因為varchar會動態分配長度,char指定為20,即時你存儲字符“1”,它依然是20的長度?

3、給表建立主鍵,看到好多表沒主鍵,這在查詢和索引定義上將有一定的影響

4、避免表字段運行為null,如果不知道添加什么值,建議設置默認值,特別int類型,比如默認值為0,在索引查詢上,效率立顯。

5、建立索引,聚集索引則意味著數據的物理存儲順序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查詢上優勢顯著,在頻繁更新數據的字段上建立聚集索引,后果很嚴重,插入更新相當忙。

6、組合索引和單索引的建立,要考慮查詢實際和具體模式.

SQL語句注意事項:

熟悉SQL的人,都會寫SQL語句,但到底效率如何,十萬以下的數據量,根本沒任何區別,但一些基礎性的東西,還是得點滴做起

1、where語句的書寫,當有多個查詢條件時,sql是按照從右往左的順序進行執行,也就是說寫在最后的條件會最早被執行,這就意味著過濾數據量最多的

添加應該寫在最后,這樣才能在性能上達到最優

2、join語句,如果A表1000w,B表30條記錄,則應該是A join B,sql執行會以B為準去關聯A,性能顯著

3、表變量和臨時表 ,這個問題可能有些同學稍陌生,所謂表變量就是declare @dd? table類似這樣的聲明,而臨時表多見#tt,這樣的格式這二者在sql內是區別對待的表變量功能有限,使用完自動釋放,臨時表計劃就是有數據表的大部分功能,使用完畢后需要刪除,在數據庫tempdb也有對應的操作記錄,使用時應該綜合考慮。

4、注意聚合函數,is null,<>等的使用,當我們在這樣使用的時候,可能習以為常,在大數據量處理上,本有的索引將不再被使用,而變成全表掃描,So ga等吧,性能大大的慢,如where? len(studentId)=0,本來在studentid上的索引變成全表掃描了。

5、使用exist代替not in,這個大家都知道,但還是希望大家注意下

6、select AA,BB,代替Select * ,這是大部分程序員的通病,總覺得無所謂,其實select * 在sql執行時還是要遍歷到具體的字段名進行讀取,即使我們要使用全部列,也推薦使用把各個字段都羅列處理,而非使用*

7、top n 和order by 你了解多少?我一直覺得where條件查詢完后order by在此基礎上進行排序,其實錯了,在有top n和order by一塊使用時,order by竟然是全表掃描,具體可以通過查詢計劃驗證。

8、編碼過程和單元測試過程盡量用數據量較大的數據庫測試,最好能用實際數據測試

9、不要頻繁更新有觸發器的表的數據

?

知識點三:

在SQL SERVER 2008中,有三種類型的觸發器:

  • DML觸發器:是指觸發器在數據庫中發生數據操作語言(DML)事件時將啟用。DML事件即指在表或視圖中修改數據的insert、update、delete語句也。
  • DDL觸發器:是指當服務器或數據庫中發生數據定義語言(DDL)事件時將啟用。DDL事件即指在表或索引中的create、alter、drop語句也。
  • 登陸觸發器:是指當用戶登錄SQL SERVER實例建立會話時觸發
  • 知識三:觸發器

    實例

    代碼什么的,時間一久,就對面不識了;但是?那些能夠給人眼前一亮的技能呀,真是一學就會。牛腩系統就是溜。

    小技巧們:

    1.? if()?然后小碎步走起,雙擊tab,就自動補全了。

    ?2.?自定義方法,要想顯示特有的注釋,怎么破???

    注釋方法:

    ///summary? ?序言注釋?

    ?模塊注釋:

    # region??

    # end region

    類注釋:?再懶些可以創建模板。每次新建的時候,使用模板就好了。

    /*

    *

    *

    */

    3. // TODO

    4.? 代碼塊復用

    ?

    ?

    錯誤:

    ERROR 1:

    解決方法:

    ERROR 2 :

    從 varchar 數據類型到 datetime 數據類型的轉換產生一個超出范圍的值

    不僅是日期小于1753-01-01會報錯,日期不對也會報錯

    ?

    各時間類型范圍、精度一覽表數據類型時間范圍精度

    datetime

    1753-01-01到9999-12-31 00:00:00 到 23:59:59.997?

    毫秒

    smalldatetime

    1900-01-01 到 2079-06-06 00:00:00 到 23:59:59

    分鐘

    date

    ?0001-01-01 到 9999-12-31

    time

    00:00:00.0000000 到 23:59:59.9999999?

    ?100 納秒

    datetime

    2 0001-01-01 到 9999-12-31 00:00:00 到 23:59:59.9999999

    100 納秒

    datetimeoffset

    ?0001-01-01 到 9999-12-31 00:00:00 到 23:59:59.9999999 -14:00 到 +14:00

    100 納秒

    ?

    ERROR 3

    raiserror

    RAISERROR?(50005,?--?Message?id.
    ???????????10,????--?Severity,
    ???????????1,?????--?State,
    ???????????N'abcde');?--?First?argument?supplies?the?string.

    ?

    EEROR 4

    ?try-catch -finally

    結論:
    1、不管有木有出現異常,finally塊中代碼都會執行;
    2、當try和catch中有return時,finally仍然會執行;
    3、finally是在return后面的表達式運算后執行的(此時并沒有返回運算后的值,而是先把要返回的值保存起來,管finally中的代碼怎么樣,返回的值都不會改變,任然是之前保存的值),所以函數返回值是在finally執行前確定的;
    4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。
    舉例:

    情況1:try{} catch(){}finally{} return;
    ??????????? 顯然程序按順序執行。
    情況2:try{ return; }catch(){} finally{} return;
    ????????? 程序執行try塊中return之前(包括return語句中的表達式運算)代碼;
    ???????? 再執行finally塊,最后執行try中return;
    ???????? finally塊之后的語句return,因為程序在try中已經return所以不再執行。
    情況3:try{ } catch(){return;} finally{} return;
    ???????? 程序先執行try,如果遇到異常執行catch塊,
    ???????? 有異常:則執行catch中return之前(包括return語句中的表達式運算)代碼,再執行finally語句中全部代碼,
    ?????????????????????最后執行catch塊中return. finally之后也就是4處的代碼不再執行。
    ?? ? ??? 無異常:執行完try再finally再return.
    情況4:try{ return; }catch(){} finally{return;}
    ????????? 程序執行try塊中return之前(包括return語句中的表達式運算)代碼;
    ????????? 再執行finally塊,因為finally塊中有return所以提前退出。
    情況5:try{} catch(){return;}finally{return;}
    ????????? 程序執行catch塊中return之前(包括return語句中的表達式運算)代碼;
    ????????? 再執行finally塊,因為finally塊中有return所以提前退出。
    情況6:try{ return;}catch(){return;} finally{return;}
    ????????? 程序執行try塊中return之前(包括return語句中的表達式運算)代碼;
    ????????? 有異常:執行catch塊中return之前(包括return語句中的表達式運算)代碼;
    ???????????????????????則再執行finally塊,因為finally塊中有return所以提前退出。
    ? ? ? ??? 無異常:則再執行finally塊,因為finally塊中有return所以提前退出。

    最終結論:任何執行try 或者catch中的return語句之前,都會先執行finally語句,如果finally存在的話。
    ??????????????????如果finally中有return語句,那么程序就return了,所以finally中的return是一定會被return的,
    ??????????????????編譯器把finally中的return實現為一個warning。

    ?

    總結

    以上是生活随笔為你收集整理的【牛腩】总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。