欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

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

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

開(kāi)通VIP
SQL數據庫面試題
  SQL數據庫面試題


1、SQL SREVER中,向一個(gè)表中插入了新數據,如何快捷的得到自增量字段的當前值

這種情況其實(shí)我們經(jīng)常用到,比如我們新建了一個(gè)用戶(hù),建立完用戶(hù)后我們希望馬上得到這個(gè)新用戶(hù)的ID,因為我們一般都是把這種用戶(hù)ID的字段設置成自增長(cháng)類(lèi)型的,乍看起來(lái)好像沒(méi)有要得到那個(gè)新ID很麻煩,其實(shí)sql server內置了一些全局的變量,使我們很容易就得到那個(gè)新的自增字段的ID,就是使用@@IDENTITY。

      在一條 INSERT、SELECT INTO 或大容量復制語(yǔ)句完成后,@@IDENTITY 中包含語(yǔ)句生成的最后一個(gè)標識值。如果語(yǔ)句未影響任何包含標識列的表,則 @@IDENTITY 返回 NULL。如果插入了多個(gè)行,生成了多個(gè)標識值,則 @@IDENTITY 將返回最后生成的標識值。如果語(yǔ)句觸發(fā)了一個(gè)或多個(gè)觸發(fā)器,該觸發(fā)器又執行了生成標識值的插入操作,那么,在語(yǔ)句執行后立即調用 @@IDENTITY 將返回觸發(fā)器生成的最后一個(gè)標識值。

在具體應用中可以這樣來(lái)寫(xiě)SQL語(yǔ)句:

string strSql = "INSERT INTO [User]([Name],[LoginName],[Pwd],[RegTime],[IsSuper],[Remark])" +
                "VALUES(@Name,@LoginName,@Pwd,@RegTime,@IsSuper,@Remark);select @@IDENTITY ;";

執行的時(shí)候直接用command.ExecuteScalar();就可以了,能直接返回該條記錄的UserID;

解答二:

經(jīng)過(guò)實(shí)驗,得如下結論:

select DISTINCT @@IDENTITY as iden from FaWen

解釋?zhuān)荷鲜稣Z(yǔ)句對 SQL SERVER 的一個(gè)會(huì )話(huà),也就是一條連接,返回該連接最后一條插入記錄得到的自增字段的值。

假設有3個(gè)程序,分別連接SQL SERVER,有三個(gè)連接。3個(gè)程序都向同一個(gè)表依順序插入數據,得到的值分別是1、2、3,那么,只要3個(gè)程序對SQL的連接還保持著(zhù),第一個(gè)程序使用上述語(yǔ)句,將得到1,而不是3,第二個(gè)程序將得到2,也不是3。第三個(gè)程序得到3。

因此,用上述語(yǔ)句可以得到自己剛才插入記錄的自增字段的值,不怕其它程序的并發(fā)插入操作。

上述語(yǔ)句中,使用 DISTINCT  的原因是,雖然返回的值是當前連接插入操作得到的最大值,但返回的相同值的記錄有多條。條數等于當前多個(gè)連接一共插入的記錄數。

實(shí)驗方法:?jiǎn)?dòng)三個(gè) Query analyzer 查詢(xún)分析器,分別執行插入操作后再做上述取自增字段值的操作

 
 
我利用  
  rs.addnew  
  增加一條記錄時(shí),如何同時(shí)獲取自增1字段ID的當前值,而無(wú)須再進(jìn)行一次查詢(xún)來(lái)獲??!因為我立即要用到該ID值,如果在增加記錄完畢后再利用select   id   進(jìn)行一次查詢(xún)無(wú)疑會(huì )使系統受限,有辦法嗎?
 
如果你能保證id=行數的話(huà)可以用  
  rs.moveend   '當指針在最后一條記錄時(shí)count是全部行數  
  rs.count
2、什么叫做SQL注入,如何防止?請舉例說(shuō)明

SQL注入就是在正常的SQL執行語(yǔ)句中惡意插入攻擊者想要運行的sql語(yǔ)句,比如,我們有一個(gè)方法是這么寫(xiě)的:

public static bool Login(string loginName,string pwd)
        {
            string strSql = string.Format("select *  from [User] where LoginName = '{0}' and Pwd = '{1}' ",loginName,pwd);

        ...

          }

如果我傳給loginname的值是' or 1=1--,那么這個(gè)sql語(yǔ)句成了select *  from [User] where LoginName = '' or 1=1--',這樣不管我密碼輸入什么,肯定都是符合條件的。當然這只是最簡(jiǎn)單的情況,如果我把loginname的值改成' or 1=1;delete from [user]--,那么后果不堪設想,如果我通過(guò)sql來(lái)執行net use相關(guān)的命令,就可能在服務(wù)器上給自己加一個(gè)賬號,這樣就逐步可以控制整個(gè)數據庫所在的服務(wù)器。。。

這就是sql注入的通常方法和可能的損害。

要放置其實(shí)也很簡(jiǎn)單,可以通過(guò)至少兩個(gè)方法來(lái)進(jìn)行:

1.最根本的,不實(shí)用組合sql的方法,而是通過(guò)使用命令參數方式來(lái)執行命令,比如我們把sql改成這種方式:

string strSql = "select * from [user] where LoginName =@LoginName and Pwd =@Pwd ";

,然后通過(guò)sqlcommand來(lái)執行它,就可以從根本上解決這個(gè)問(wèn)題。

2.控制參數的長(cháng)度。因為要想進(jìn)行sql注入的話(huà),需要一定長(cháng)度的字符串才能執行,如果我們規定LoginName 的長(cháng)度最長(cháng)不超過(guò)8個(gè),一般不會(huì )造成損害,當然這個(gè)只是在特殊的情況下才使用,比如有些情況可能不能使用命令參數方式。

點(diǎn)評:

sql注入是我們編程時(shí)必須考慮的問(wèn)題,特別是BS的程序,更是要嚴格檢查是否有sql注入的漏洞。最關(guān)鍵的一點(diǎn)是,你要明白怎么解決這個(gè)問(wèn)題,一般面試人員會(huì )希望你提高使用參數方式來(lái)防止注入。

3、游標的作用?如何知道游標已經(jīng)到了最后?

關(guān)系數據庫中的操作會(huì )對整個(gè)行集起作用。由 SELECT 語(yǔ)句返回的行集包括滿(mǎn)足該語(yǔ)句的 WHERE 子句中條件的所有行。這種由語(yǔ)句返回的完整行集稱(chēng)為結果集。應用程序,特別是交互式聯(lián)機應用程序,并不總能將整個(gè)結果集作為一個(gè)單元來(lái)有效地處理。這些應用程序需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的對結果集的一種擴展。

游標的特點(diǎn)是:

允許定位在結果集的特定行。
從結果集的當前位置檢索一行或一部分行。
支持對結果集中當前位置的行進(jìn)行數據修改。
為由其他用戶(hù)對顯示在結果集中的數據庫數據所做的更改提供不同級別的可見(jiàn)性支持。
提供腳本、存儲過(guò)程和觸發(fā)器中用于訪(fǎng)問(wèn)結果集中的數據的 Transact-SQL 語(yǔ)句
在從游標中提取信息后,可以通過(guò)判斷@@FETCH_STATUS 的值來(lái)判斷是否到了最后。當@@FETCH_STATUS為0的時(shí)候,說(shuō)明提取是成功的,否則就可以認為到了最后。

點(diǎn)評:

游標是進(jìn)行數據庫操作的一個(gè)重要概念,但是在現代的軟件開(kāi)發(fā)中應用的不是很多,只有在一些特殊的存儲過(guò)程中才會(huì )應用。但是,畢竟這是一個(gè)很重要,也是我們必須掌握的概念,最好能理解它的原理和用法。

4、SQL Server的兩種索引是何形式?索引的作用?索引的優(yōu)缺點(diǎn)?

sql server的索引分為聚集索引和非聚集索引,下面分別說(shuō)明:
聚集索引
聚集索引根據數據行的鍵值在表或視圖中排序和存儲這些數據行。索引定義中包含聚集索引列。每個(gè)表只能有一個(gè)聚集索引,因為數據行本身只能按一個(gè)順序排序。
只有當表包含聚集索引時(shí),表中的數據行才按排序順序存儲。如果表具有聚集索引,則該表稱(chēng)為聚集表。如果表沒(méi)有聚集索引,則其數據行存儲在一個(gè)稱(chēng)為堆的無(wú)序結構中。

非聚集索引
非聚集索引具有獨立于數據行的結構。非聚集索引包含非聚集索引鍵值,并且每個(gè)鍵值項都有指向包含該鍵值的數據行的指針。
從非聚集索引中的索引行指向數據行的指針?lè )Q為行定位器。行定位器的結構取決于數據頁(yè)是存儲在堆中還是聚集表中。對于堆,行定位器是指向行的指針。對于聚集表,行定位器是聚集索引鍵。


索引的作用主要是為了在查詢(xún)時(shí)提高查詢(xún)的效率,并且盡量減小更新時(shí)的開(kāi)銷(xiāo)。

優(yōu)點(diǎn):

設計良好的索引查詢(xún)效率可以得到極大的提高,某些情況下甚至可以提高幾百上千倍。

缺點(diǎn):

需要占用額外的空間和資源。在更新時(shí)耗費的時(shí)間更大,因為對數據的更新很有可能會(huì )導致索引的更新,這樣就會(huì )導致增加系統開(kāi)銷(xiāo)。

點(diǎn)評:

在所有的進(jìn)行系統優(yōu)化的選擇中,索引都是第一位的,一個(gè)設計良好的數據庫肯定需要高超的索引設計技巧,在這方面效率提高不是一倍兩倍的問(wèn)題,而是可能會(huì )有質(zhì)的飛躍,對索引優(yōu)化的重要性,在一個(gè)大型項目里,怎么說(shuō)都不為過(guò)。但是,索引優(yōu)化又是比較困難的,哪些列需要加入索引,列的順序怎樣,哪個(gè)索引需要設置為聚集索引等等,都是我們必須要考慮的問(wèn)題。

5、事務(wù)是什么?

事務(wù)是單個(gè)的工作單元。如果某一事務(wù)成功,則在該事務(wù)中進(jìn)行的所有數據修改均會(huì )提交,成為數據庫中的永久組成部分。

如果事務(wù)遇到錯誤且必須取消或回滾,則所有數據修改均被清除。

也就是說(shuō),事務(wù)是由一系列的“原子”操作組成的,這些原子操作必須全部完成,否則所有的動(dòng)作都會(huì )被取消并恢復到初始狀態(tài)。

開(kāi)始事務(wù)使用BEGIN TRANSACTION 語(yǔ)句顯,以 COMMIT 或 ROLLBACK 語(yǔ)句結束。

以上是針對數據庫來(lái)說(shuō)的。

但是,事務(wù)不僅僅限于數據庫,數據庫以外的動(dòng)作也可以被組合進(jìn)事務(wù)中,一般稱(chēng)為“企業(yè)級事務(wù)”。舉一個(gè)例子:我們有這兩個(gè)操作必須都完成,即在向數據庫插入一條記錄后必須在硬盤(pán)的某個(gè)文件夾內創(chuàng )建一個(gè)文件,這個(gè)就是一個(gè)企業(yè)級事務(wù),它超出了簡(jiǎn)單的數據庫事務(wù)的范疇。我們可以通過(guò)編程來(lái)實(shí)現企業(yè)級事務(wù)。

點(diǎn)評:

事務(wù)是數據庫開(kāi)發(fā)中一個(gè)非常重要的概念,它對與保證數據庫的完整性和一致性非常重要。對于事務(wù)的的C#代碼實(shí)現更是務(wù)必要熟練掌握。

6、存儲過(guò)程和函數的區別

存儲過(guò)程,功能強大,可以執行包括修改表等一系列數據庫操作,也可以創(chuàng )建為 SQL Server 啟動(dòng)時(shí)自動(dòng)運行的存儲過(guò)程。
自定義函數,用戶(hù)定義函數不能用于執行一組修改全局數據庫狀態(tài)的操作。
 

存儲過(guò)程,可以使用非確定函數。
自定義函數,不允許在用戶(hù)定義函數主體中內置非確定函數。
 

存儲過(guò)程,可返回記錄集。
自定義函數,可以返回表變量,也可以有任意個(gè)輸出參數,
 

存儲過(guò)程,其返回值不能被直接引用,必須單獨調用
自定義函數,其返回值可以被直接引用,也就是可以直接 select * from 函數


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
sqlserver數據庫操作大全
[整理]Oracle面試題(基礎篇)
Oracle面試題
目錄 - 《精通SQL——結構化查詢(xún)語(yǔ)言詳解》 - 免費試讀 - book.csdn.ne...
MySQL詳解
沒(méi)有比這篇更全的MySQL知識點(diǎn)更全的匯總了!
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久