免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
數(shù)據(jù)庫(kù)查詢
  1. MSSQLServer中從INSERT中返回IDENTITY
    遇到這樣一個(gè)問(wèn)題,一張表只有一個(gè)PK且是IDENTITY,在向表中插入數(shù)據(jù)后需要得到插入記錄的PK值。剛開(kāi)始使用鎖表的方法,比較繁瑣,后來(lái)發(fā)現(xiàn)下面的方法:
    SET NOCOUNT ON;
    INSERT INTO USERMST (Name) VALUES (‘username‘);
    SELECT @@IDENTITY

    關(guān)鍵在第一行上,設(shè)置不要返回受操作影響的行數(shù)。執(zhí)行上面的SQL后,可以從ResultSet中得到ID的值,也就是SELECT @@IDENTITY取得的最新的IDENTITY值。
    參考:http://www.microsoft.com/china/MSDN/library/data/sqlserver/FiveWaystoRevupYourSQLPerformanCE.mspx

    在ORACLE中也有類(lèi)似方法:(當(dāng)然,也可以從Sequence中得到)
    Declare
        userrow USERMST%rowtype;
    Begin
        INSERT INTO USERMST (Id,Name) VALUES (idseq.nextval,‘username‘)
          RETURNING Id,Name INTO userrow.Id, userrow.Name;
    End;

    Oracle Release 2之后可以簡(jiǎn)化為
        INSERT INTO USERMST (Id,Name) VALUES (idseq.nextval,‘username‘)
          RETURNING Id,Name INTO userrow;

    參考:http://www.cnblogs.com/sunsonbaby/archive/2005/02/01/100547.html
  2. MSSQLServer中的事務(wù)鎖
    還是同一個(gè)項(xiàng)目,遇到一個(gè)事務(wù)處理的問(wèn)題。預(yù)約者通過(guò)網(wǎng)站預(yù)約參加會(huì)議,管理者可以變更會(huì)議參加的人數(shù)額度及刪除預(yù)約者,這時(shí)候,就產(chǎn)生了數(shù)據(jù)同步的問(wèn)題:預(yù)約者和管理者同時(shí)變更數(shù)據(jù),可能造成一方拿到“臟數(shù)據(jù)”,而使得系統(tǒng)產(chǎn)生差錯(cuò)。下面就是加鎖方法:
    SELECT [columns] FROM [table] WITH (tablehints)
    tablehints的可用參數(shù)如下:
        HOLDLOCK 持有共享鎖,直到整個(gè)事務(wù)完成,應(yīng)該在被鎖對(duì)象不需要時(shí)立即釋放,等于SERIALIZABLE事務(wù)隔離級(jí)別
        NOLOCK 語(yǔ)句執(zhí)行時(shí)不發(fā)出共享鎖,允許臟讀,等于READ UNCOMMITTED事務(wù)隔離級(jí)別
        PAGLOCK 在使用一個(gè)表鎖的地方用多個(gè)頁(yè)鎖
        READPAST 讓sql server跳過(guò)任何鎖定行,執(zhí)行事務(wù),適用于READ UNCOMMITTED事務(wù)隔離級(jí)別只跳過(guò)RID鎖,不跳過(guò)頁(yè),區(qū)域和表鎖
        ROWLOCK 強(qiáng)制使用行鎖
        TABLOCKX 強(qiáng)制使用獨(dú)占表級(jí)鎖,這個(gè)鎖在事務(wù)期間阻止任何其他事務(wù)使用這個(gè)表
        UPLOCK 強(qiáng)制在讀表時(shí)使用更新而不用共享鎖
    同樣也可以通過(guò)T-SQL的事務(wù)語(yǔ)句或者ADO的控件參數(shù)設(shè)置事務(wù)級(jí)別,詳細(xì)請(qǐng)看下面鏈接。
    參考:http://www.ddvip.net/database/mssql/jqapp/159.htm
    還有一篇http://bbs.ustc.edu.cn/cgi/bbscon?bn=DataBase&fn=M41f36292&num=3378

    對(duì)應(yīng)的,Oracle中比較常用的方法:
    SELECT [columns] FROM [table] FOR UPDATE [NOWAIT]
  3. MSSQLServer中的集計(jì)運(yùn)算
    接觸了一個(gè)新的系統(tǒng),中間運(yùn)用了很多集計(jì)運(yùn)算,卻沒(méi)有用平常使用的SUM,COUNT函數(shù),而是用了一個(gè)GROUP BY的關(guān)鍵字WITH ROLLUP/CUBE,加上這個(gè)關(guān)鍵字,將會(huì)對(duì)分組后的數(shù)據(jù)按照層次進(jìn)行集計(jì)運(yùn)算,并將數(shù)據(jù)直接付在所集計(jì)數(shù)據(jù)之后,對(duì)于報(bào)表數(shù)據(jù)的處理有很大的幫助。對(duì)于ROOLUP和CUBE的區(qū)別在于,ROLLUP按分組層次來(lái)運(yùn)算,而CUBE是按所有可能的組合來(lái)運(yùn)算。下面給個(gè)例子,數(shù)據(jù)如下:
    Item                 Color                Quantity
    -------------------- -------------------- --------------------------
    Table                Blue                 124
    Table                Red                  223
    Chair                Blue                 101
    Chair                Red                  210
    使用集計(jì)運(yùn)算SQL,中間的CASE語(yǔ)句是為了去掉集計(jì)產(chǎn)生的NULL值,可以去掉看一下有什么區(qū)別。
    SELECT CASE WHEN (GROUPING(Item) = 1) THEN ‘ALL
                ELSE ISNULL(Item, ‘UNKNOWN‘)
           END AS Item,
           CASE WHEN (GROUPING(Color) = 1) THEN ‘ALL
                ELSE ISNULL(Color, ‘UNKNOWN‘)
           END AS Color,
           SUM(Quantity) AS QtySum
    FROM Inventory
    GROUP BY Item, Color WITH ROLLUP

    產(chǎn)生結(jié)果集:
    Item                 Color                QtySum
    -------------------- -------------------- --------------------------
    Chair                Blue                 101.00
    Chair                Red                  210.00
    Chair                ALL                  311.00
    Table                Blue                 124.00
    Table                Red                  223.00
    Table                ALL                  347.00
    ALL                  ALL                  658.00
    如果使用WITH CUBE,那么結(jié)果集還會(huì)多出下面兩行記錄
    ALL                  Blue                 225.00
    ALL                  Red                  433.00

    注意觀察,紅色的部分,是ROLLUP對(duì)Color分組層進(jìn)行運(yùn)算的結(jié)果,綠色部分則是對(duì)Item層的,而CUBE會(huì)將Color與Item的任意一種組合都進(jìn)行運(yùn)算。是不是很方便呢。
  4. 數(shù)據(jù)庫(kù)中的Collate
    Collate關(guān)鍵字指定了數(shù)據(jù)庫(kù)使用的效驗(yàn)方式。簡(jiǎn)單來(lái)說(shuō),就是數(shù)據(jù)的比較規(guī)則,比如大小寫(xiě)敏感,長(zhǎng)度敏感等等,Collate可以在建數(shù)據(jù)庫(kù)、表、甚至在SQL實(shí)行時(shí)指定。這次遇到的問(wèn)題是因?yàn)楸容^2個(gè)數(shù)據(jù)庫(kù)中表字段,但2個(gè)數(shù)據(jù)庫(kù)使用的默認(rèn)Collate不一樣,導(dǎo)致類(lèi)型轉(zhuǎn)換錯(cuò)誤,比較失敗,SQL報(bào)錯(cuò)。通常不太會(huì)注意這類(lèi)問(wèn)題,但是遇到導(dǎo)入或者分布式的數(shù)據(jù)庫(kù)時(shí)或許會(huì)出現(xiàn)問(wèn)題。
    下面附帶查詢默認(rèn)數(shù)據(jù)庫(kù)以外的SQL語(yǔ)句
    SELECT 字段名 FROM [數(shù)據(jù)庫(kù)名].[表所有者名].表名
    比如:SELECT TA.C1, TB.C2 FROM TableA TA , otherdb.dbo.TableB TB
    其中,表所有者名可以省略,變?yōu)閛therdb..TableB,當(dāng)然,當(dāng)前連接用戶要有訪問(wèn)otherdb數(shù)據(jù)庫(kù)的權(quán)限。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
MySQL 8.0.12 有什么新內(nèi)容?
繁體SQL 數(shù)據(jù)庫(kù) 簡(jiǎn)體SQL SERVER 2000-網(wǎng)絡(luò)程序及編程
聽(tīng)說(shuō)這是史上最簡(jiǎn)單的 MySQL 教程(內(nèi)有圣誕節(jié)福利)
SQL語(yǔ)句的常用語(yǔ)法
談?wù)剶?shù)據(jù)庫(kù)sql編寫(xiě)
ORACLE中的基本語(yǔ)法 SELECT CREATE Views group by 的使用...
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服