隨筆-26  評論-12  文章-0  trackbacks-0
            2012年8月8日

          什么是索引?

              提起索引,應(yīng)該不會感到陌生,若說它就是目錄,大概都知道了,數(shù)據(jù)庫的索引與書的目錄很相似,都叫index.書的內(nèi)容相當(dāng)于數(shù)據(jù)庫表中的數(shù)據(jù),書的目錄通過頁碼指向書的內(nèi)容,同樣,索引也記錄了表中的關(guān)鍵值,提供了指向表中行的指針.書的目錄使讀者很快的找到想看的內(nèi)容,而不必翻看書的每一頁,索引使得數(shù)據(jù)庫應(yīng)用程序能夠不掃描全表而找到想要的數(shù)據(jù).

           

          索引是不是多多益善?

              索引可以創(chuàng)建在一列或多列的組合上,也可以在數(shù)據(jù)庫表的多個列上建立不同的索引,但這些列應(yīng)該是經(jīng)常作為查詢條件的列.需要指出的是,并不是表上的索引越多越好,在數(shù)據(jù)庫設(shè)計過程中,還是需要為表選擇一些合適的索引。寧缺勿爛,這是建立索引時的一個具體選擇。在理論上,雖然一個表可以設(shè)置無限的索引,表中的索引越多,維護(hù)索引所需要的開銷也就越大。每當(dāng)數(shù)據(jù)表中記錄有增加、刪除、更新變化的時候,數(shù)據(jù)庫系統(tǒng)都需要對所有索引進(jìn)行更新。

           

          索引的分類

              索引可以分為三類:聚集索引(clustered index),非聚集索引,唯一性索引(unique index).根據(jù)索引字段組成又有復(fù)合索引的說法,復(fù)合索引可以是唯一索引也可以不是唯一索引.一個表上最多創(chuàng)建一個聚集索引和249個非聚集索引.

           

          創(chuàng)建索引的條件

          (1)為經(jīng)常出現(xiàn)在關(guān)鍵字orderby、group by、distinct后面的字段,建立索引。

          (2)在union等集合操作的結(jié)果集字段上,建立索引。

          (3)為經(jīng)常用作查詢選擇的字段,建立索引。

          (4)在經(jīng)常用作表連接的屬性上,建立索引。

          (5)考慮使用索引覆蓋。對數(shù)據(jù)很少被更新的表,如果用戶經(jīng)常只查詢其中的幾個字段,可以考慮在這幾個字段上建立索引,從而將表的掃描改變?yōu)樗饕膾呙琛?/p>

           

          創(chuàng)建索引的限制

          (1)限制索引數(shù)目。

           (2)唯一性太差的字段不適合單獨(dú)創(chuàng)建索引;

           (3)更新頻繁的字段不適合創(chuàng)建索引;

           (4)不會做為查詢條件的字段不創(chuàng)建索引

          posted @ 2012-08-18 23:09 地心引力 閱讀(1481) | 評論 (0)編輯 收藏

                存儲過程和觸發(fā)器都是一組SQL語句集合,他們在數(shù)據(jù)庫開發(fā)過程中,在對數(shù)據(jù)庫的維護(hù)和管理等任務(wù)中,以及在維護(hù)數(shù)據(jù)庫參照完整性等方面,具有不可替代的作用.而觸發(fā)器是一種特殊的存儲過程,存儲過程獨(dú)立于表,具有訪問和操縱數(shù)據(jù)庫數(shù)據(jù)的功能,使應(yīng)用程序執(zhí)行效率得到進(jìn)一步提高.觸發(fā)器也是T_SQL語句的集合,它與表密切結(jié)合,實現(xiàn)表中更為復(fù)雜的業(yè)務(wù)規(guī)則.

                   存儲過程是以一個名字存儲在數(shù)據(jù)庫中的,經(jīng)過預(yù)編譯的T_SQL語句集合,可以獨(dú)立執(zhí)行或通過應(yīng)用程序的調(diào)用來執(zhí)行.


                  觸發(fā)器是不由用戶直接調(diào)用的,而是在對表或視圖中數(shù)據(jù)進(jìn)行update,insert或者delete操作時自動執(zhí)行.一個表或視圖可以有多個觸發(fā)器,每個觸發(fā)器可以包含復(fù)雜的SQL語句.數(shù)據(jù)庫表之間的引用完整性約束,除了可以采用主鍵和外鍵的對應(yīng)約束來實現(xiàn)之外,還可以使用觸發(fā)器,從而實現(xiàn)更復(fù)雜的用戶定義完整性約束.

              

          posted @ 2012-08-18 23:09 地心引力 閱讀(1179) | 評論 (0)編輯 收藏

          字符函數(shù)

          這個函數(shù)一般接收字符作為參數(shù),并且可以返回字符或數(shù)字

          其中最常用有以下兩個函數(shù)


          1.CONCAT函數(shù)

          主要用于字符串的連接,具體語法如下

          CONCAT(c1,c2)

          接收兩個參數(shù),將第二個參數(shù)連接到第一個參數(shù)的末尾,假如第二個參數(shù)是NULL,

          則函數(shù)返回第一個參數(shù),假如第一個參數(shù)是NULL,則參數(shù)返回第二個參數(shù),

          假如都為NULL,則函數(shù)返回NULL


          為商品價格添加元單位示例如下:



          2.NVL函數(shù)

          這個函數(shù)主要用于函數(shù)替換

          NVL(e1,e2)

          接收兩個參數(shù),假如第一個參數(shù)不為NULL時,函數(shù)返回第一個參數(shù),

          假如第一個參數(shù)為NULL時,函數(shù)返回第二個參數(shù)

          具體的使用示例如下:

          查詢商品表的相關(guān)信息,對沒有詳細(xì)介紹的商品默認(rèn)設(shè)置顯示“暫無詳細(xì)描述”


          可使用暫無詳細(xì)描述來代替NULL


          字符常用函數(shù)還有很多,希望大家能在我的基礎(chǔ)上評論補(bǔ)充

          posted @ 2012-08-18 23:08 地心引力 閱讀(1158) | 評論 (0)編輯 收藏

          SQL語言是一種高級的非過程化的查詢語言,用戶使用它主要進(jìn)行數(shù)據(jù)庫的操作

          可以把SQL語言看成是客戶端與服務(wù)器端溝通的一個工具,用來存取,查詢和更新,關(guān)系數(shù)據(jù)庫系統(tǒng)


          Insert語句

          INSERT語句的語法結(jié)構(gòu)如下:


          table值的是要插入數(shù)據(jù)的表的表名,Column指的是要插入數(shù)據(jù)的列名,Value指的是要插入的具體數(shù)據(jù)值


          例如往會員表中插入一個新的會員數(shù)據(jù),可以這樣添加:


          前者的優(yōu)點(diǎn)是可以指定哪些字段添加哪些數(shù)據(jù),缺點(diǎn)是表名后面的小括號中的字段名需要和Value值相對照

          后者的優(yōu)點(diǎn)是書寫簡單,缺點(diǎn)是要把所有的字段都在Value中進(jìn)行賦值

          當(dāng)需要插入數(shù)據(jù)包含有空值的時候,一般使用第一種方法,而第二種方法進(jìn)行插入需要使用NULL關(guān)鍵字進(jìn)行填充


          假如插入的數(shù)據(jù)包含時間,而且時間是當(dāng)前的時間,



          假如插入的是時間,并且時間是某個具體的時間,我們可以將上述的語句進(jìn)行修改如下:


          以上操作的都是單行的數(shù)據(jù),而下面的操作是多行的數(shù)據(jù)


          插入多行數(shù)據(jù)示例如下:



          UPDATE語句

          UPDATE語句結(jié)構(gòu)如下:



          如初始化所有會員密碼:



          按條件更新:



          做更新操作的時候,WHERE條件一般選擇類似主鍵這樣有唯一性約束的字段,除非特殊情況,

          否則的話會引起意想不到的誤操作,比如更新用戶表時以name作為條件的話,就十分危險,

          因為名字是可以重復(fù)的


          Select語句

          我們對數(shù)據(jù)庫做得最多的操作是數(shù)據(jù)檢索

          select語句就顯得極其重要

          其中最簡單的查詢實例如下:


          *指的是所有列


          而查詢所有VIP數(shù)據(jù)如下:



          查詢兩個條件同時成立的示例如下:



          查詢兩個條件成立其中一個,示例如下:



          查詢條件為空的示例如下:



          當(dāng)要查詢會員中所有姓李的會員時,需要用到模糊查詢:


          % 能匹配0到多個字符

          _ 能任意匹配單個字符


          查詢商品表中價格在300-400之間的商品數(shù)據(jù);



          而查詢會員表中張三、李四、王五的信息方法如下:



          使用別名查詢:



          其中查詢中可能需要對查詢的結(jié)果進(jìn)行排序,其結(jié)構(gòu)如下:



          查詢商品表,按上架時間進(jìn)行排序:



          如果想去掉查詢結(jié)果中的重復(fù)數(shù)據(jù),可以使用Distinction關(guān)鍵字,如下



          Delete語句

          語法結(jié)構(gòu)如下


          其中的table 和 condition在上面已經(jīng)有提及

          刪除示例如下


          在實際操作中我們應(yīng)該使用假刪除,就是再增加一個狀態(tài)(一般為status)的字段

          在刪除錯誤之后,我們可以用 ROLLBACK來回滾事務(wù)

          posted @ 2012-08-18 23:08 地心引力 閱讀(1176) | 評論 (0)編輯 收藏
               摘要: 管理數(shù)據(jù)完整性一 學(xué)習(xí)目標(biāo)  1.實現(xiàn)數(shù)據(jù)完整性約束  2.管理完整性約束  3.從數(shù)據(jù)字典中獲取約束信息二 保證數(shù)據(jù)完整性的方法  1.應(yīng)用程序代碼控制  2.觸發(fā)器控制  3.聲明完整性約束三 約束的類型 (見圖)    1.not null    (不能為空)  ...  閱讀全文
          posted @ 2012-08-18 23:07 地心引力 閱讀(1333) | 評論 (0)編輯 收藏

          linux是一個多用戶,多任務(wù)的操作系統(tǒng),對于每一個文件它的屬性中都包括:文件所有者(owner),文件所屬組(group),其他用戶(other),還必須具備與這三個角色對應(yīng)的讀,寫,執(zhí)行的權(quán)限,如下圖:

          在tmp目錄下面有一個a.txt文件,我們通過ls -l命令可以查看其詳細(xì)信息:

          -:表示普通文件,d:表示目錄文件,l:鏈接文件,b:設(shè)備文件中可以供存儲的接口設(shè)備,c:設(shè)備文件中串行端口設(shè)備如鍵盤。

          由于最前面是-:所以a.txt是普通文件。

          再看  rw-r--r--部分,我們將其分為三組,分別對應(yīng)文件所有者,文件所屬組,其他用戶的權(quán)限.

          其中r代表讀取權(quán)限,w:代表寫權(quán)限,x:代表執(zhí)行權(quán)限(這里沒出現(xiàn)),-:代表沒有某種權(quán)限。

          那對上面的權(quán)限的解釋就是:

          owner:可以讀和寫,不能執(zhí)行

          group:可以讀取不能寫,不能執(zhí)行

          other:可以讀取,不能寫,不能執(zhí)行

           

          第一個root代表文件所有者,第二個root代表文件所屬組

          那么現(xiàn)在我如果想修改文件所有者,文件所屬組,文件權(quán)限該怎么做,請繼續(xù)向下閱讀:

          chgrp:修改用戶所屬組,chown:修改文件所有者,chmod:修改文件權(quán)限

           

          假設(shè)我的系統(tǒng)中又一個叫g(shù)avin的組(通過/etc/group查看)

          如上圖,通過chgrp命令將該文件的group修改為了gavin

          下面修改其所有者:

           

          修改其權(quán)限:

           

          chmod  777 a.txt   這個777代表什么?

          在linux中使用數(shù)字代表權(quán)限:

          r:4 w:2 x:1

          r--   =4+0+0=4;

          rw- =4+2+0=6;

          rwx =4+2+1=7

          相信寫到這里大家都應(yīng)該明白了吧。

           

          權(quán)限對于文件和文件夾的意義是不一樣的,

          對于文件:

          r:代表可以讀取文件的內(nèi)容,w:代表可以修改文件的內(nèi)容,x:可以執(zhí)行這個文件

          對于文件夾:

          r:可以獲取文件夾中又哪些文件,w:可以添加和刪除文件夾中的內(nèi)容,x:可以進(jìn)入文件夾,

          如果某個角色對于一個文件夾的權(quán)限是rw-;

          那么他僅僅可以使用ls獲取文件夾中的內(nèi)容,但是不可以使用cd進(jìn)入該文件夾。

           

           

           

          文件的權(quán)限告一段落,現(xiàn)在來看看linux中的那些常見目錄中的內(nèi)容:

          /bin   系統(tǒng)有很多放置執(zhí)行文件的目錄,但是/bin比較特殊,因為/bin放置的是在單用戶維護(hù)模式下還能夠被操作的命令,在/bin下面的命令可以被root和一般賬戶使用,如:cat,chmod,chown,data,mv,mkdir,cp ,bash等常用命令。

          /boot  主要放置開機(jī)使用到的文件

          /dev  在linux系統(tǒng)中任何設(shè)備與接口設(shè)備都是以文件的形式存在于這個目錄當(dāng)中,你只要訪問某個文件就相當(dāng)于訪問該設(shè)備

          /etc  系統(tǒng)的主要配置文件幾乎都在這個文件夾類。

          /home 這是系統(tǒng)默認(rèn)的用戶主文件夾

          /lib 系統(tǒng)的函數(shù)庫非常多,二/lib放置的是開機(jī)會使用到的函數(shù)庫

          /mnt 如果你想臨時掛在一些外部設(shè)備(光盤)一般建議放置到這個目錄。

          /opt 這是給第三方軟件放置的目錄

          /root 系統(tǒng)管理員的主文件夾

          /tmp 這是讓一般用戶或者正在執(zhí)行的程序放置文件的地方,這個目錄是任何人都可以訪問的,所以你需要定期清理一下,當(dāng)然重要數(shù)據(jù)時不能放到這里來的。

           

           

          關(guān)于文件權(quán)限的最后一點(diǎn)就是:文件默認(rèn)權(quán)限umask

          現(xiàn)在我們已經(jīng)知道如何新建或者改變一個目錄的屬性了,不過你知道當(dāng)你新建一個新的文件或則目錄是,它的默認(rèn)權(quán)限是什么嗎?那就是于umask這東西有關(guān)了,那么umask是在搞什么呢,基本上,umask就是制定目前用戶在新建文件或目錄的時候權(quán)限的默認(rèn)值,如果獲得或設(shè)置umask,方法如下:

          #umask  或則  umask -S

          (四位數(shù),第一位我們先不管,表示特殊權(quán)限,我們從第二位開始看起)

          在默認(rèn)權(quán)限上,文件和目錄是不一樣的,對于一個目錄,x權(quán)限是非常重要的 ,而對于一個文件,x權(quán)限在默認(rèn)是不應(yīng)該有的,因為文件大多是用來存儲數(shù)據(jù)的,所以在linux中,文件的默認(rèn)權(quán)限是666,目錄的默認(rèn)權(quán)限是777

           

           

          要注意的是umask的分?jǐn)?shù)指的是“默認(rèn)值需要剪掉的權(quán)限”,

          所以新建文件時權(quán)限:rw--r--r--

          新建目錄:r-xr-xr-x

          posted @ 2012-08-08 23:41 地心引力 閱讀(1043) | 評論 (0)編輯 收藏
          #include <stdio.h>
          #include <stdlib.h>

          /*判斷用戶輸入的字符串是否為回文
           *回文是指順讀和反讀都一樣的串
           *例:abccba為回文,abcdab不是回文
          */

          int Palindrome(const char *str)
          {
              int length = strlen(str);
              for(int i = 0; i <= length/2; i++)
              {
                  if(str[i] != str[length-i-1])
                  {
                      return -1;
                  }
              }
              return 1;
          }

          int main()
          {
              char s[100];
              gets(s);
              int result = Palindrome(s);
              if(result == 1)
              {
                  printf("字符串是回文");
              }
              else
              {
                  printf("字符串不是回文");
              }
          }


           
          posted @ 2012-08-08 23:40 地心引力 閱讀(6390) | 評論 (2)編輯 收藏
          package com.xtfggef;

          public class SelectSort {

              /**
               * 
          @param args
               
          */
              public static void main(String[] args) {
                  int[] data = new int[]{2,3,4,1,9,8};
                  System.out.println("before sorted:");
                  for(int k=0; k<data.length; k++){
                      System.out.print(data[k]+" ");
                  }
                  System.out.println();
                  int length = data.length;
                  for(int i=0; i<length-1; i++){
                      int flag = i;
                      for(int j=i+1; j<length; j++){
                          if(data[flag]>data[j]){
                              flag = j;
                          }
                      }
                      if(flag!=i){
                          int temp=0;
                          temp=data[i];
                          data[i]=data[flag];
                          data[flag]=temp;
                      }
                  }
                  System.out.println("after sorted:");
                  for(int h=0; h<data.length; h++){
                      System.out.print(data[h]+" ");
                  }
                  System.out.println();
              }

          }
          posted @ 2012-08-08 23:39 地心引力 閱讀(835) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 辽中县| 阿鲁科尔沁旗| 贵德县| 教育| 永州市| 内丘县| 金华市| 孟连| 海伦市| 柞水县| 堆龙德庆县| 青田县| 东莞市| 安宁市| 平舆县| 浦江县| 伊通| 丰原市| 昭苏县| 马龙县| 怀宁县| 泾源县| 易门县| 克什克腾旗| 麻城市| 峨山| 淮南市| 西昌市| 富锦市| 红原县| 新源县| 舒兰市| 大邑县| 景宁| 兴和县| 沙洋县| 名山县| 龙里县| 孝昌县| 兴宁市| 仙桃市|