<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2011年12月4日

    Java是一個(gè)面向?qū)ο蟮恼Z言,java面向?qū)ο笠话阌腥筇卣鳎悍庋b、繼承、多態(tài)。

    封裝:就是把一些屬性和方法封裝到一個(gè)類里。

    繼承:就如子類繼承父類的一些屬性和方法。

    多態(tài):就如一個(gè)父類有多個(gè)不同特色的子類。

    這里我就不多講解,下面我主要說明一個(gè)繼承。繼承是OOP(面向?qū)ο螅┑囊粋€(gè)特色,java只支持單繼承(如果繼承兩個(gè)有同樣方法的父類,那么就不知道繼承到那個(gè)父類的,所以java只支持單繼承)。繼承是java的一個(gè)特色,我們用的所以類都繼承Objict類,所以就要Object類的方法,如toString()、getClass()、wait()……所以我們建立的類都有父類。

    Java中一般有三種類:

    基本類:也就是一般的類(一般所說的類就是基本類),是對象的模板,是屬性和方法的集合。可以繼承其他基本類、抽象類、實(shí)現(xiàn)接口。

    抽象類:有抽象方法的類(抽象方法就是該方法必須由繼承來實(shí)現(xiàn),本身只定義,不實(shí)現(xiàn))。抽象類可以有一個(gè)或多個(gè)抽象方法,他是基本類和接口類的過度。

    接口類:一般叫做接口,該類中的所有方法都是抽象方法,該類的方法本身只定義不實(shí)現(xiàn)。

    抽象類和接口一個(gè)由【abstract class + 抽象類名】一個(gè)由【interface +接口名】定義,接口中的所以方法都是抽象方法,而抽象類有部分方法是自身實(shí)現(xiàn)了的,一些只定義不實(shí)現(xiàn)。

    基本類的定義:

    public class Fruit {

        public void price() {

           System.out.println("水果價(jià)格");

        }

        public void weight() {

           System.out.println("水果重量");

        }

    }

    抽象類的定義:

    public abstract class Fruit {

        public void price() {

           System.out.println("水果價(jià)格");

        }

        public abstract void weight();

    }

    接口類的定義:

    public interface Fruit {

        public void price();

        public void weight() ;

    }

    從上面我們可以看出接口就是抽象類的升級版,由于該類的方法全是抽象方法,所以把a(bǔ)bstract換成interface。而接口的方法必須由子類才能實(shí)現(xiàn)。

     

    繼承

    繼承基本類,可以繼承父類的方法,也可以從些,也可以擴(kuò)充。下面是實(shí)現(xiàn)接口基本類的類:

    public class Apple extends Fruit {

    }

    該類中就有Fruit基本類中的兩個(gè)方法:price()和weight();

    繼承抽象類,必須實(shí)現(xiàn)抽象類的抽象方法,可以修改父類的方法,和添加方法。下面是繼承抽象類的類:

    public class Apple extends Fruit {

        @Override

        public void weight() {

           System.out.println("水果重量");

        }

    }

    該類繼承類Fruit的price()方法,同時(shí)實(shí)現(xiàn)了Fruit抽象類的weight()方法。

    繼承接口類(也就實(shí)現(xiàn)接口),必須實(shí)現(xiàn)接口類的所有的抽象類和添加了。下面是繼承接口的類:

    public class Aple implements Fruit {

        @Override

        public void price() {

           System.out.println("水果價(jià)格");

        }

        @Override

        public void weight() {

           System.out.println("水果重量");

        }

    }

    該類是實(shí)現(xiàn)Fruit接口的所以抽象方法。

     

    Java只支持單繼承(繼承基本類和抽象類),但是我們可以用接口來實(shí)現(xiàn)(多繼承接口來實(shí)現(xiàn))

    如:public class Apple extends Fruit implements Fruit1, Fruit2{}

    一般我們繼承基本類和抽象類用extends關(guān)鍵字,實(shí)現(xiàn)接口類的繼承用implements關(guān)鍵字。其實(shí)繼承是很簡單的,可以就是沒有弄清這兩個(gè)關(guān)鍵字,當(dāng)我們弄清楚也就是比較簡單的。

    接口也可以繼承接口如:public interface Fruit1 extends Fruit {}這是接口中的多重繼承,同理抽象類和基本類也同理。如果我們把基本類添加final修飾,也就定義該類不被繼承,該類不能作為父類。同時(shí)基本類的方法可以用public 、private、proptected來修飾方法,用final來阻止繼承該方法。

    這里只是自己的理解,有些地方時(shí)用詞不當(dāng)?shù)模皇怯X得這樣用詞更好的理解,請大家諒解。有些地方由于不是這里的重點(diǎn),沒有講清楚,希望大家通過其他方式了解。

    posted @ 2011-12-04 23:08 陳小東 閱讀(1074) | 評論 (0)編輯 收藏

    public class BubbleSort implements SortUtil.Sort{

         public void sort(int[] data) {

            int temp;

            for(int i=0;i<data.length;i++){

                for(int j=data.length-1;j>i;j--){

                    if(data[j]<data[j-1]){

                        SortUtil.swap(data,j,j-1);

                    }

                }

            }

        }

    posted @ 2011-12-04 22:58 陳小東 閱讀(1122) | 評論 (0)編輯 收藏

    public class InsertSort implements SortUtil.Sort{

         public void sort(int[] data) {

            int temp;

            for(int i=1;i<data.length;i++){

                for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){

                    SortUtil.swap(data,j,j-1);

                }

            }       

        }

    }

    posted @ 2011-12-04 22:57 陳小東 閱讀(730) | 評論 (0)編輯 收藏


    2011年12月3日

    什么是SQL注入式攻擊?
    所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動(dòng)態(tài)SQL命令,或作為存儲(chǔ)過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。常見的SQL注入式攻擊過程類如:
    ⑴ 某個(gè)ASP.NET Web應(yīng)用有一個(gè)登錄頁面,這個(gè)登錄頁面控制著用戶是否有權(quán)訪問應(yīng)用,它要求用戶輸入一個(gè)名稱和密碼。
    ⑵ 登錄頁面中輸入的內(nèi)容將直接用來構(gòu)造動(dòng)態(tài)的SQL命令,或者直接用作存儲(chǔ)過程的參數(shù)。下面是ASP.NET應(yīng)用構(gòu)造查詢的一個(gè)例子:
    System.Text.StringBuilder query = new System.Text.StringBuilder(
       "SELECT * from Users WHERE login = '")
       .Append(txtLogin.Text).Append("' AND password='")
       .Append(txtPassword.Text).Append("'");

    ⑶ 攻擊者在用戶名字和密碼輸入框中輸入"'或'1'='1"之類的內(nèi)容。
    ⑷ 用戶輸入的內(nèi)容提交給服務(wù)器之后,服務(wù)器運(yùn)行上面的ASP.NET代碼構(gòu)造出查詢用戶的SQL命令,但由于攻擊者輸入的內(nèi)容非常特殊,所以最后得到的SQL命令變成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。
    ⑸ 服務(wù)器執(zhí)行查詢或存儲(chǔ)過程,將用戶輸入的身份信息和服務(wù)器中保存的身份信息進(jìn)行對比。
    ⑹ 由于SQL命令實(shí)際上已被注入式攻擊修改,已經(jīng)不能真正驗(yàn)證用戶身份,所以系統(tǒng)會(huì)錯(cuò)誤地授權(quán)給攻擊者。
    如果攻擊者知道應(yīng)用會(huì)將表單中輸入的內(nèi)容直接用于驗(yàn)證身份的查詢,他就會(huì)嘗試輸入某些特殊的SQL字符串篡改查詢改變其原來的功能,欺騙系統(tǒng)授予訪問權(quán)限。
    系統(tǒng)環(huán)境不同,攻擊者可能造成的損害也不同,這主要由應(yīng)用訪問數(shù)據(jù)庫的安全權(quán)限決定。如果用戶的帳戶具有管理員或其他比較高級的權(quán)限,攻擊者就可能對數(shù)據(jù)庫的表執(zhí)行各種他想要做的操作,包括添加、刪除或更新數(shù)據(jù),甚至可能直接刪除表
    如何防范SQL注入式攻擊?
    好在要防止ASP.NET應(yīng)用被SQL注入式攻擊闖入并不是一件特別困難的事情,只要在利用表單輸入的內(nèi)容構(gòu)造SQL命令之前,把所有輸入內(nèi)容過濾一番就可以了。過濾輸入內(nèi)容可以按多種方式進(jìn)行。
    ⑴ 對于動(dòng)態(tài)構(gòu)造SQL查詢的場合,可以使用下面的技術(shù):
    第一:替換單引號,即把所有單獨(dú)出現(xiàn)的單引號改成兩個(gè)單引號,防止攻擊者修改SQL命令的含義。再來看前面的例子,"SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'"顯然會(huì)得到與"SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'"不同的結(jié)果。
    第二:刪除用戶輸入內(nèi)容中的所有連字符,防止攻擊者構(gòu)造出類如"SELECT * from Users WHERE login = 'mas' -- AND password =''"之類的查詢,因?yàn)檫@類查詢的后半部分已經(jīng)被注釋掉,不再有效,攻擊者只要知道一個(gè)合法的用戶登錄名稱,根本不需要知道用戶的密碼就可以順利獲得訪問權(quán)限。
    第三:對于用來執(zhí)行查詢的數(shù)據(jù)庫帳戶,限制其權(quán)限。用不同的用戶帳戶執(zhí)行查詢、插入、更新、刪除操作。由于隔離了不同帳戶可執(zhí)行的操作,因而也就防止了原本用于執(zhí)行SELECT命令的地方卻被用于執(zhí)行INSERT、UPDATE或DELETE命令。
    ⑵ 用存儲(chǔ)過程來執(zhí)行所有的查詢。SQL參數(shù)的傳遞方式將防止攻擊者利用單引號和連字符實(shí)施攻擊。此外,它還使得數(shù)據(jù)庫權(quán)限可以限制到只允許特定的存儲(chǔ)過程執(zhí)行,所有的用戶輸入必須遵從被調(diào)用的存儲(chǔ)過程的安全上下文,這樣就很難再發(fā)生注入式攻擊了。
    ⑶ 限制表單或查詢字符串輸入的長度。如果用戶的登錄名字最多只有10個(gè)字符,那么不要認(rèn)可表單中輸入的10個(gè)以上的字符,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。
    ⑷ 檢查用戶輸入的合法性,確信輸入的內(nèi)容只包含合法的數(shù)據(jù)。數(shù)據(jù)檢查應(yīng)當(dāng)在客戶端和服務(wù)器端都執(zhí)行——之所以要執(zhí)行服務(wù)器端驗(yàn)證,是為了彌補(bǔ)客戶端驗(yàn)證機(jī)制脆弱的安全性。
    在客戶端,攻擊者完全有可能獲得網(wǎng)頁的源代碼,修改驗(yàn)證合法性的腳本(或者直接刪除腳本),然后將非法內(nèi)容通過修改后的表單提交給服務(wù)器。因此,要保證驗(yàn)證操作確實(shí)已經(jīng)執(zhí)行,唯一的辦法就是在服務(wù)器端也執(zhí)行驗(yàn)證。你可以使用許多內(nèi)建的驗(yàn)證對象,例如 RegularExpressionValidator,它們能夠自動(dòng)生成驗(yàn)證用的客戶端腳本,當(dāng)然你也可以插入服務(wù)器端的方法調(diào)用。如果找不到現(xiàn)成的驗(yàn)證對象,你可以通過CustomValidator自己創(chuàng)建一個(gè)。
    ⑸ 將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫中保存的數(shù)據(jù)比較,這相當(dāng)于對用戶輸入的數(shù)據(jù)進(jìn)行了"消毒"處理,用戶輸入的數(shù)據(jù)不再對數(shù)據(jù)庫有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。 System.Web.Security.FormsAuthentication類有一個(gè) HashPasswordForStoringInConfigFile,非常適合于對輸入數(shù)據(jù)進(jìn)行消毒處理。
    ⑹ 檢查提取數(shù)據(jù)的查詢所返回的記錄數(shù)量。如果程序只要求返回一個(gè)記錄,但實(shí)際返回的記錄卻超過一行,那就當(dāng)作出錯(cuò)處理


    posted @ 2011-12-03 00:06 陳小東 閱讀(1103) | 評論 (0)編輯 收藏

    實(shí)體查詢
    例子1:
    Hql代碼 復(fù)制代碼
    1. String hql=”from User user ”;      
    2. List list=session.CreateQuery(hql).list();   


    因?yàn)镠QL語句與標(biāo)準(zhǔn)SQL語句相似,所以我們也可以在HQL語句中使用where字句,并且可以在where字句中使用各種表達(dá)式,比較操作符以及使用“and”,”or”連接不同的查詢條件的組合。看下面的一些簡單的例子:
    Hql代碼 復(fù)制代碼
    1. from User user where user.age=20;  


    例子2(返回一個(gè)屬性):
    Hql代碼 復(fù)制代碼
    1. String hql= "select c.customerNamefrom Customer c“;   
    2. Query query= session.createQuery(hql);   
    3. Iteratorit = query.list().iterator();   
    4. System.out.println(query.list().size());   
    5. while(it.hasNext()) {   
    6. String c = (String)it.next();   
    7. System.out.println(c);   
    8. }  


    例子3(返回多個(gè)屬性):
    如果返回多個(gè)屬性,那么它們將被裝入數(shù)組或者集合中
    Hql代碼 復(fù)制代碼
    1. String hql= "select c.customerId, c.customerName“+   
    2. “from Customer c“;   
    3. Query query= session.createQuery(hql);   
    4. Iteratorit = query.list().iterator();   
    5. while(it.hasNext()) {   
    6. Object[] obj= (Object[])it.next();   // List list= (List)it.next();   
    7. Long id = (Long)obj[0];          //Long id = (Long)list.get(0);   
    8. String name = (String)obj[1];     //String name = (String)list.get(1);   
    9. System.out.println(id.longValue() + " " + name);   
    10. }  

    posted @ 2011-12-03 00:05 陳小東 閱讀(689) | 評論 (0)編輯 收藏


    2011年11月29日

    摘要:

    1 加Salt散列
    2 ASP.NET 2.0 Membership中與密碼散列有關(guān)的代碼

    聲明:本文所羅列之源代碼均通過Reflector取自.NET Framework類庫,引用這些代碼僅出于學(xué)習(xí)和研究的目的。

    其實(shí),對密碼進(jìn)行散列存儲(chǔ)不是一個(gè)新鮮話題了,解決起來也不是很難,但很多人還是不大了解。這個(gè)小文只是強(qiáng)調(diào)一下“加Salt散列”這個(gè)簡單的技術(shù),并給出ASP.NET Membership所使用的代碼。

    本來打算寫一篇介紹如何實(shí)現(xiàn)用戶登錄功能的文章的,但因?yàn)闀r(shí)間有限,所以先介紹一下密碼的散列,下一篇再介紹用戶登錄。

    ----

    1 密碼必須散列存儲(chǔ)

    (內(nèi)容略)

    2 加Salt散列

    我們知道,如果直接對密碼進(jìn)行散列,那么黑客(統(tǒng)稱那些有能力竊取用戶數(shù)據(jù)并企圖得到用戶密碼的人)可以對一個(gè)已知密碼進(jìn)行散列,然后通過對比散列值得到某用戶的密碼。換句話說,雖然黑客不能取得某特定用戶的密碼,但他可以知道使用特定密碼的用戶有哪些。

    加Salt可以一定程度上解決這一問題。所謂加Salt,就是加點(diǎn)“佐料”。其基本想法是這樣的——當(dāng)用戶首次提供密碼時(shí)(通常是注冊時(shí)),由系統(tǒng)自動(dòng)往這個(gè)密碼里撒一些“佐料”,然后再散列。而當(dāng)用戶登錄時(shí),系統(tǒng)為用戶提供的代碼撒上同樣的“佐料”,然后散列,再比較散列值,已確定密碼是否正確。

    這里的“佐料”被稱作“Salt值”,這個(gè)值是由系統(tǒng)隨機(jī)生成的,并且只有系統(tǒng)知道。這樣,即便兩個(gè)用戶使用了同一個(gè)密碼,由于系統(tǒng)為它們生成的salt值不同,他們的散列值也是不同的。即便黑客可以通過自己的密碼和自己生成的散列值來找具有特定密碼的用戶,但這個(gè)幾率太小了(密碼和salt值都得和黑客使用的一樣才行)。

    下面詳細(xì)介紹一下加Salt散列的過程。介紹之前先強(qiáng)調(diào)一點(diǎn),前面說過,驗(yàn)證密碼時(shí)要使用和最初散列密碼時(shí)使用“相同的”佐料。所以Salt值是要存放在數(shù)據(jù)庫里的。


    用戶注冊時(shí):

    1)用戶提供密碼(以及其他用戶信息);
    2)系統(tǒng)為用戶生成Salt值;
    3)系統(tǒng)將Salt值和用戶密碼連接到一起;
    4)對連接后的值進(jìn)行散列,得到Hash值;
    5)將Hash值和Salt值分別放到數(shù)據(jù)庫中。


    登錄時(shí):
    1)用戶提供用戶名和密碼;
    2)系統(tǒng)通過用戶名找到與之對應(yīng)的Hash值和Salt值;
    3)系統(tǒng)將Salt值和用戶提供的密碼連接到一起;
    4)對連接后的值進(jìn)行散列,得到Hash'(注意有個(gè)“撇”);
    5)比較Hash和Hash'是否相等,相等則表示密碼正確,否則表示密碼錯(cuò)誤。

    3 ASP.NET 2.0 Membership中的相關(guān)代碼
    (省略關(guān)于Membership的介紹若干字)
    本文Anders Liu僅研究了SqlMembershipProvider,該類位于System.Web.dll,System.Web.Security命名空間中。
    首先,要使用Membership,必須先用aspnet_regsql.exe命令來配置數(shù)據(jù)庫,該工具會(huì)向現(xiàn)有數(shù)據(jù)庫中添加一系列表和存儲(chǔ)過程等,配置好的數(shù)據(jù)庫中有一個(gè)表aspnet_Membership,就是用于存放用戶帳戶信息的。其中我們所關(guān)注的列有三個(gè)——Password、PasswordFormat和PasswordSalt。

    Password存放的是密碼的散列值,PasswordFormat存放用于散列密碼所使用的算法,PasswordSalt就是系統(tǒng)生成的Salt值了。

    網(wǎng)站安全了,程序自然也就復(fù)雜了...
         discuz的加密方式:md5(md5($password).$salt),$salt是一個(gè)6位隨機(jī)數(shù)。
         注冊的時(shí)候,把用戶的密碼用md5(md5($password).$salt)加密,$salt是一個(gè)6位隨機(jī)數(shù)字,下面是我的一個(gè)獲取6位隨機(jī)數(shù)的一個(gè)方法:
         function randstr($len=6) {
         $chars='abcdefghijklmnopqrstuvwxyz0123456789';
    // characters to build the password from
         mt_srand((double)microtime()*1000000*getmypid());
    // seed the random number generater (must be done)
         $password='';
         while(strlen($password)<$len)
             $password.=substr($chars,(mt_rand()%strlen($chars)),1);
         return $password;
    }
         $salt=randstr();把randstr()賦值給$salt,然后用md5(md5(會(huì)員提交的密碼).$salt)加密就可以了,但是千萬不要忘了把$salt入庫哦(uc_members表)。
         登陸的時(shí)候根據(jù)用戶名把$salt取出來,用md5(md5(會(huì)員提交的密碼).$salt)匹配密碼,如果一樣就登陸成功了

    posted @ 2011-11-29 09:40 陳小東 閱讀(1009) | 評論 (2)編輯 收藏

    繼承的優(yōu)缺點(diǎn)
    優(yōu)點(diǎn)
    新的實(shí)現(xiàn)很容易,因?yàn)榇蟛糠质抢^承而來的
    很容易修改和擴(kuò)展已有的實(shí)現(xiàn)

    缺點(diǎn)
    打破了封裝,因?yàn)榛愊蜃宇惐┞读藢?shí)現(xiàn)細(xì)節(jié)
    白盒重用,因?yàn)榛惖膬?nèi)部細(xì)節(jié)通常對子類是可見的
    當(dāng)父類的實(shí)現(xiàn)改變時(shí)可能要相應(yīng)的對子類做出改變
    不能在運(yùn)行時(shí)改變由父類繼承來的實(shí)現(xiàn)
    由此可見,組合比繼承具有更大的靈活性和更穩(wěn)定的結(jié)構(gòu),一般情況下應(yīng)該優(yōu)先考慮組合。只


    有當(dāng)下列條件滿足時(shí)才考慮使用繼承:
    子類是一種特殊的類型,而不只是父類的一個(gè)角色
    子類的實(shí)例不需要變成另一個(gè)類的對象
    子類擴(kuò)展,而不是覆蓋或者使父類的功能失效

    posted @ 2011-11-29 09:37 陳小東 閱讀(2601) | 評論 (2)編輯 收藏


    2011年11月24日

    臨時(shí)表
        臨時(shí)表與永久表相似,但臨時(shí)表存儲(chǔ)在 tempdb 中,當(dāng)不再使用時(shí)會(huì)自動(dòng)刪除。
        臨時(shí)表有兩種類型:本地和全局。它們在名稱、可見性以及可用性上有區(qū)別。本地臨時(shí)表的名稱以單個(gè)數(shù)字符號 (#) 打頭;它們僅對當(dāng)前的用戶連接是可見的;當(dāng)用戶從 SQL Server 實(shí)例斷開連接時(shí)被刪除。全局臨時(shí)表的名稱以兩個(gè)數(shù)字符號 (##) 打頭,創(chuàng)建后對任何用戶都是可見的,當(dāng)所有引用該表的用戶從 SQL Server 斷開連接時(shí)被刪除。
        例如,如果創(chuàng)建了 employees 表,則任何在數(shù)據(jù)庫中有使用該表的安全權(quán)限的用戶都可以使用該表,除非已將其刪除。如果數(shù)據(jù)庫會(huì)話創(chuàng)建了本地臨時(shí)表 #employees,則僅會(huì)話可以使用該表,會(huì)話斷開連接后就將該表刪除。如果創(chuàng)建了 ##employees 全局臨時(shí)表,則數(shù)據(jù)庫中的任何用戶均可使用該表。如果該表在您創(chuàng)建后沒有其他用戶使用,則當(dāng)您斷開連接時(shí)該表刪除。如果您創(chuàng)建該表后另一個(gè)用戶在使用該表,則 SQL Server 將在您斷開連接并且所有其他會(huì)話不再使用該表時(shí)將其刪除。

    視圖視圖
        可以被看成是虛擬表或存儲(chǔ)查詢。除非是索引視圖,否則視圖的數(shù)據(jù)不會(huì)作為非重復(fù)對象存儲(chǔ)在數(shù)據(jù)庫中。數(shù)據(jù)庫中存儲(chǔ)的是 SELECT 語句。SELECT 語句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以采用引用表時(shí)所使用的方法,在 Transact-SQL 語句中引用視圖名稱來使用此虛擬表
        視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。視圖在數(shù)據(jù)庫中并不是以數(shù)據(jù)值存儲(chǔ)集形式存在,除非是索引視圖。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。
    對其中所引用的基礎(chǔ)表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當(dāng)前或其他數(shù)據(jù)庫的一個(gè)或多個(gè)表,或者其他視圖。分布式查詢也可用于定義使用多個(gè)異類源數(shù)據(jù)的視圖。例如,如果有多臺(tái)不同的服務(wù)器分別存儲(chǔ)您的單位在不同地區(qū)的數(shù)據(jù),而您需要將這些服務(wù)器上結(jié)構(gòu)相似的數(shù)據(jù)組合起來,這種方式就很有用。
        通過視圖進(jìn)行查詢沒有任何限制,通過它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少。
        視圖種類:索引視圖和索引視圖
        SQL Server 2005 查詢處理器對索引視圖和非索引視圖將區(qū)別對待: 索引視圖的行以表的格式存儲(chǔ)在數(shù)據(jù)庫中。如果查詢優(yōu)化器決定使用查詢計(jì)劃的索引視圖,則索引視圖將按照基表的處理方式進(jìn)行處理。只有非索引視圖的定義才存儲(chǔ),而不存儲(chǔ)視圖的行。查詢優(yōu)化器將視圖定義中的邏輯納入執(zhí)行計(jì)劃,而該執(zhí)行計(jì)劃是它為引用非索引視圖的 SQL 語句生成的。
        SQL Server 查詢優(yōu)化器用于決定何時(shí)使用索引視圖的邏輯與用于決定何時(shí)對表使用索引的邏輯相似。如果索引視圖中的數(shù)據(jù)包括所有或部分 SQL 語句,而且查詢優(yōu)化器確定視圖的某個(gè)索引是低成本的訪問路徑,則不論查詢中是否引用了該視圖的名稱,查詢優(yōu)化器都將選擇此索引。當(dāng) SQL 語句引用非索引視圖時(shí),分析器和查詢優(yōu)化器將分析 SQL 語句的源和視圖的源,然后將它們解析為單個(gè)執(zhí)行計(jì)劃。

    posted @ 2011-11-24 09:19 陳小東 閱讀(1003) | 評論 (0)編輯 收藏

    1. 數(shù)據(jù)抽象:物理抽象、概念抽象、視圖級抽象,內(nèi)模式、模式、外模式
    2. SQL語言包括數(shù)據(jù)定義、數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)控制(Data Control)
    數(shù)據(jù)定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等
    數(shù)據(jù)操縱:Select ,insert,update,delete,
    數(shù)據(jù)控制:grant,revoke
    3. SQL常用命令:
    CREATE TABLE Student(
    ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(50) NOT NULL);//建表
    CREATE VIEW view_name AS
    Select * FROM Table_name;//建視圖
    Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
    INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插入
    INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入視圖實(shí)際影響表
    UPDATE tablename SET name=’zang 3’ condition;//更新數(shù)據(jù)
    DELETE FROM Tablename WHERE condition;//刪除
    GRANT (Select,delete,…) ON (對象) TO USER_NAME [WITH GRANT OPTION];//授權(quán)
    REVOKE (權(quán)限表) ON(對象) FROM USER_NAME [WITH REVOKE OPTION] //撤權(quán)
    列出工作人員及其領(lǐng)導(dǎo)的名字:
    Select E.NAME, S.NAME FROM EMPLOYEE E S
    WHERE E.SUPERName=S.Name
    4. 視圖:
    5. 完整性約束:實(shí)體完整性、參照完整性、用戶定義完整性
    6. 第三范式:
    1NF:每個(gè)屬性是不可分的。 2NF:若關(guān)系R是1NF,且每個(gè)非主屬性都完全函數(shù)依賴于R的鍵。例SLC(SID#, CourceID#, SNAME,Grade),則不是2NF; 3NF:若R是2NF,且它的任何非鍵屬性都不傳遞依賴于任何候選鍵。
    7. ER(實(shí)體/聯(lián)系)模型
    8. 索引作用
    9. 事務(wù):是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用的基本邏輯單位。事務(wù)性質(zhì):原子性、
    ? 原子性。即不可分割性,事務(wù)要么全部被執(zhí)行,要么就全部不被執(zhí)行。
    ? 一致性或可串性。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)
    ? 隔離性。在事務(wù)正確提交之前,不允許把該事務(wù)對數(shù)據(jù)的任何改變提供給任何其他事務(wù),
    ? 持久性。事務(wù)正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中,即使在事務(wù)提交后有了其他故障,事務(wù)的處理結(jié)果也會(huì)得到保存。
    10. 鎖:共享鎖、互斥鎖
    兩段鎖協(xié)議:階段1:加鎖階段 階段2:解鎖階段
    11. 死鎖及處理:事務(wù)循環(huán)等待數(shù)據(jù)鎖,則會(huì)死鎖。
    死鎖處理:預(yù)防死鎖協(xié)議,死鎖恢復(fù)機(jī)制
    12. 存儲(chǔ)過程:存儲(chǔ)過程就是編譯好了的一些sql語句。
    1.存儲(chǔ)過程因?yàn)镾QL語句已經(jīng)預(yù)編繹過了,因此運(yùn)行的速度比較快。
    2. 可保證數(shù)據(jù)的安全性和完整性。通過存儲(chǔ)過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。通過存儲(chǔ)過程可以使相關(guān)的動(dòng)作在一起發(fā)生,從而可以維護(hù)數(shù)據(jù)庫的完整性。
    3.可以降低網(wǎng)絡(luò)的通信量。存儲(chǔ)過程主要是在服務(wù)器上運(yùn)行,減少對客戶機(jī)的壓力。
    4:存儲(chǔ)過程可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。可以向程序返回錯(cuò)誤原因
    5:存儲(chǔ)過程可以包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。同時(shí)可以實(shí)體封裝和隱藏了數(shù)據(jù)邏輯。  
    13. 觸發(fā)器: 當(dāng)滿足觸發(fā)器條件,則系統(tǒng)自動(dòng)執(zhí)行觸發(fā)器的觸發(fā)體。
    觸發(fā)時(shí)間:有before,after.觸發(fā)事件:有insert,update,delete三種。觸發(fā)類型:有行觸發(fā)、語句觸發(fā)
    14.內(nèi)聯(lián)接,外聯(lián)接區(qū)別?
    內(nèi)連接是保證兩個(gè)表中所有的行都要滿足連接條件,而外連接則不然。
    在外連接中,某些不滿條件的列也會(huì)顯示出來,也就是說,只限制其中一個(gè)表的行,而不限制另一個(gè)表的行。分左連接、右連接、全連接三種

    posted @ 2011-11-24 09:17 陳小東 閱讀(5876) | 評論 (1)編輯 收藏


    2011年11月23日

         摘要:   閱讀全文

    posted @ 2011-11-23 09:35 陳小東 閱讀(899) | 評論 (0)編輯 收藏


    僅列出標(biāo)題  下一頁

    posts - 34, comments - 38, trackbacks - 0, articles - 0

    Copyright © 陳小東

    主站蜘蛛池模板: 区三区激情福利综合中文字幕在线一区亚洲视频1 | 日本视频在线观看永久免费| 最新猫咪www免费人成| 久久水蜜桃亚洲AV无码精品 | 性生大片视频免费观看一级| 亚洲香蕉成人AV网站在线观看| 一个人看的www免费在线视频| 国产v片免费播放| 大地资源在线资源免费观看 | 中文字幕视频免费| 久久亚洲色WWW成人欧美| 国产亚洲无线码一区二区| 无码中文字幕av免费放| 精品乱子伦一区二区三区高清免费播放| 免费在线观看中文字幕| 久久久久久AV无码免费网站下载 | 国产精品小视频免费无限app| 亚洲精品无码AV中文字幕电影网站 | 亚洲午夜激情视频| 一区二区三区免费视频网站| 亚洲视频在线免费看| 色拍自拍亚洲综合图区| 久久久高清日本道免费观看| 亚洲av女电影网| 暖暖在线视频免费视频| 美女无遮挡免费视频网站| 亚洲日韩国产精品无码av| 亚洲一区二区三区偷拍女厕| 全部免费国产潢色一级| 毛片免费全部播放无码| 中文字幕日本人妻久久久免费| 亚洲一区二区中文| 桃子视频在线观看高清免费完整| 久久久久久A亚洲欧洲AV冫| 成人无遮挡裸免费视频在线观看| 久久久亚洲精华液精华液精华液 | 亚洲人成网7777777国产| 国产一级淫片a视频免费观看| 黄色视屏在线免费播放| 91久久亚洲国产成人精品性色 | 国产精品久免费的黄网站|