當前位置:首頁 » 操作系統 » 資料庫從鍵

資料庫從鍵

發布時間: 2022-09-27 09:59:23

『壹』 超鍵(super key)、候選鍵(candidate key)和主鍵(primary key) 外鍵(foreign key)的區別

超鍵(super key):在關系中能唯一標識元組的屬性集稱為關系模式的超鍵
候選鍵(candidate key):不含有多餘屬性的超鍵稱為候選鍵
主鍵(primary key):用戶選作元組標識的一個候選鍵程序主鍵

比如一個小范圍的所有人,沒有重名的,考慮以下屬性

身份證 姓名 性別 年齡

身份證唯一,所以是一個超鍵
姓名唯一,所以是一個超鍵
(姓名,性別)唯一,所以是一個超鍵
(姓名,性別,年齡)唯一,所以是一個超鍵
--這里可以看出,超鍵的組合是唯一的,但可能不是最小唯一的

身份證唯一,而且沒有多餘屬性,所以是一個候選鍵
姓名唯一,而且沒有多餘屬性,所以是一個候選鍵
--這里可以看出,候選鍵是沒有多餘屬性的超鍵

考慮輸入查詢方便性,可以選擇 身份證 為主鍵
也可以 考慮習慣 選擇 姓名 為主鍵
--主鍵是選中的一個候選鍵

『貳』 My sql資料庫建表的問題

你將id設置為primary key;
將workerld 設置為unique

『叄』 資料庫中的鍵、主碼、主鍵是什麼意思

碼(鍵):代表數目的符號
主碼也就是主鍵,是惟一標識表中的每一行的欄位或者多個欄位的組合,它可以實現表的實體完整性
每個表只能有惟一的主碼,且不能為空
這需要理清幾個概念:
1)候選鍵: 關系中的一個屬性組,其值能唯一標識一個元組,若從該屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。

2)主鍵:當有多個候選碼時,可以選定一個作為主碼,選定的候選碼稱主鍵

3)外鍵: 關系R中的一個屬性組,它不是R的候選碼,但它與另一個關系S的候選碼相對應,則稱這個屬性組為R的外碼或外鍵。

舉個例子:
有兩個關系:
student(s#,sname,d#),即學生這個關系有三個屬性:學號,姓名,所在系別
dep(d#,dname),即院系有兩個屬性:系號、系名

則s#、d#是主鍵,也是各自所在關系的唯一候選鍵,d#是student的外鍵

『肆』 資料庫主庫與從庫

這其實是根據資料庫的三大範式設計範式(範式,資料庫設計範式,資料庫的設計範式)是符合某一種級別的關系模式的集合。構造資料庫必須遵循一定的規則。在關系資料庫中,這種規則就是範式。關系資料庫中的關系必須滿足一定的要求,即滿足不同的範式。目前關系資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、第四範式(4NF)、第五範式(5NF)和第六範式(6NF)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫只需滿足第三範式(3NF)就行了。下面我們舉例介紹第一範式(1NF)、第二範式(2NF)和第三範式(3NF)。
在創建一個資料庫的過程中,范化是將其轉化為一些表的過程,這種方法可以使從資料庫得到的結果更加明確。這樣可能使資料庫產生重復數據,從而導致創建多餘的表。范化是在識別資料庫中的數據元素、關系,以及定義所需的表和各表中的項目這些初始工作之後的一個細化的過程。
下面是范化的一個例子 Customer Item purchased Purchase price Thomas Shirt $40 Maria Tennis shoes $35 Evelyn Shirt $40 Pajaro Trousers $25
如果上面這個表用於保存物品的價格,而你想要刪除其中的一個顧客,這時你就必須同時刪除一個價格。范化就是要解決這個問題,你可以將這個表化為兩個表,一個用於存儲每個顧客和他所買物品的信息,另一個用於存儲每件產品和其價格的信息,這樣對其中一個表做添加或刪除操作就不會影響另一個表。關系資料庫的幾種設計範式介紹1 第一範式(1NF)

在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。
所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。例如,對於圖3-2 中的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一範式就是無重復的列。2 第二範式(2NF)

第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。如圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是非主屬性非部分依賴於主關鍵字。3 第三範式(3NF)

滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在圖3-2的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。

資料庫設計三大範式應用實例剖析

資料庫的設計範式是資料庫設計所需要滿足的規范,滿足這些規范的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的編程人員製造麻煩,而且面目可憎,可能存儲了大量不需要的冗餘信息。
設計範式是不是很難懂呢?非也,大學教材上給我們一堆數學公式我們當然看不懂,也記不住。所以我們很多人就根本不按照範式來設計資料庫。
實質上,設計範式用很形象、很簡潔的話語就能說清楚,道明白。本文將對範式進行通俗地說明,並以筆者曾經設計的一個簡單論壇的資料庫為例來講解怎樣將這些範式應用於實際工程。範式說明

第一範式(1NF):資料庫表中的欄位都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字元型、邏輯型、日期型等。

例如,如下的資料庫表是符合第一範式的: 欄位1 欄位2 欄位3 欄位4 而這樣的資料庫表是不符合第一範式的: 欄位1 欄位2 欄位3 欄位4
欄位3.1 欄位3.2 很顯然,在當前的任何關系資料庫管理系統(DBMS)中,傻瓜也不可能做出不符合第一範式的資料庫,因為這些DBMS不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的DBMS中設計出不符合第一範式的資料庫都是不可能的。

第二範式(2NF):資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。 假定選課關系表為SelectCourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關系:
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)

這個資料庫表不滿足第二範式,因為存在如下決定關系:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的欄位決定非關鍵字的情況。

由於不符合2NF,這個選課關系表會存在如下問題:
(1) 數據冗餘:
同一門課程由n個學生選修,"學分"就重復n-1次;同一個學生選修了m門課程,姓名和年齡就重復了m-1次。
(2) 更新異常:
若調整了某門課程的學分,數據表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
(3) 插入異常:
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。
(4) 刪除異常:
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。

把選課關系表SelectCourse改為如下三個表:
學生:Student(學號, 姓名, 年齡);
課程:Course(課程名稱, 學分);
選課關系:SelectCourse(學號, 課程名稱, 成績)。

這樣的資料庫表是符合第二範式的, 消除了數據冗餘、更新異常、插入異常和刪除異常。
另外,所有單關鍵字的資料庫表都符合第二範式,因為不可能存在組合關鍵字。 第三範式(3NF):在第二範式的基礎上,數據表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如果存在"A → B → C"的決定關系,則C傳遞函數依賴於A。因此,滿足第三範式的資料庫表應該不存在如下依賴關系:
關鍵欄位 → 非關鍵欄位x → 非關鍵欄位y

假定學生關系表為Student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院電話),關鍵字為單一關鍵字"學號",因為存在如下決定關系:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院電話)

這個資料庫是符合2NF的,但是不符合3NF,因為存在如下決定關系:
(學號) → (所在學院) → (學院地點, 學院電話)
即存在非關鍵欄位"學院地點"、"學院電話"對關鍵欄位"學號"的傳遞函數依賴。

它也會存在數據冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關系表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, 電話)。 這樣的資料庫表是符合第三範式的,消除了數據冗餘、更新異常、插入異常和刪除異常。
鮑依斯-科得範式(BCNF):在第三範式的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。

假設倉庫管理關系表為StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個資料庫表中存在如下決定關系:
(倉庫ID, 存儲物品ID) →(管理員ID, 數量)
(管理員ID, 存儲物品ID) → (倉庫ID, 數量)
所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵欄位為數量,它是符合第三範式的。但是,由於存在如下決定關系:
(倉庫ID) → (管理員ID)
(管理員ID) → (倉庫ID)
即存在關鍵欄位決定關鍵欄位的情況,所以其不符合BCNF範式。它會出現如下異常情況:
(1) 刪除異常:
當倉庫被清空後,所有"存儲物品ID"和"數量"信息被刪除的同時,"倉庫ID"和"管理員ID"信息也被刪除了。
(2) 插入異常:
當倉庫沒有存儲任何物品時,無法給倉庫分配管理員。
(3) 更新異常:
如果倉庫換了管理員,則表中所有行的管理員ID都要修改。

把倉庫管理關系表分解為二個關系表:
倉庫管理:StorehouseManage(倉庫ID, 管理員ID);
倉庫:Storehouse(倉庫ID, 存儲物品ID, 數量)。
這樣的資料庫表是符合BCNF範式的,消除了刪除異常、插入異常和更新異常。

範式應用

我們來逐步搞定一個論壇的資料庫,有如下信息:
(1)用戶:用戶名,email,主頁,電話,聯系地址
(2)帖子:發帖標題,發帖內容,回復標題,回復內容

第一次我們將資料庫設計為僅僅存在表:
用戶名 email 主頁電話 聯系地址 發帖標題 發帖內容 回復標題 回復內容
這個資料庫表符合第一範式,但是沒有任何一組候選關鍵字能決定資料庫表的整行,唯一的關鍵欄位用戶名也不能完全決定整個元組。我們需要增加"發帖ID"、"回復ID"欄位,即將表修改為:
用戶名 email 主頁電話 聯系地址 發帖ID 發帖標題 發帖內容 回復ID 回復標題 回復內容
這樣數據表中的關鍵字(用戶名,發帖ID,回復ID)能決定整行:
(用戶名,發帖ID,回復ID) → (email,主頁,電話,聯系地址,發帖標題,發帖內容,回復標題,回復內容)
但是,這樣的設計不符合第二範式,因為存在如下決定關系:
(用戶名) → (email,主頁,電話,聯系地址)
(發帖ID) → (發帖標題,發帖內容)
(回復ID) → (回復標題,回復內容)
即非關鍵欄位部分函數依賴於候選關鍵欄位,很明顯,這個設計會導致大量的數據冗餘和操作異常。

我們將資料庫表分解為(帶下劃線的為關鍵字):
(1) 用戶信息:用戶名,email,主頁,電話,聯系地址
(2) 帖子信息:發帖ID,標題,內容
(3) 回復信息:回復ID,標題,內容
(4) 發貼:用戶名,發帖ID
(5) 回復:發帖ID,回復ID

這樣的設計是滿足第1、2、3範式和BCNF範式要求的,但是這樣的設計是不是最好的呢?
不一定。

觀察可知,第4項"發帖"中的"用戶名"和"發帖ID"之間是1:N的關系,因此我們可以把"發帖"合並到第2項的"帖子信息"中;第5項"回復"中的"發帖ID"和"回復ID"之間也是1:N的關系,因此我們可以把"回復"合並到第3項的"回復信息"中。這樣可以一定量地減少數據冗餘,新的設計為:
(1) 用戶信息:用戶名,email,主頁,電話,聯系地址
(2) 帖子信息:用戶名,發帖ID,標題,內容
(3) 回復信息:發帖ID,回復ID,標題,內容

資料庫表1顯然滿足所有範式的要求;

資料庫表2中存在非關鍵字「標題」、「內容」對關鍵欄位「發帖ID」的部分函數依賴,即不滿足第二範式的要求,但是這一設計並不會導致數據冗餘和操作異常;

資料庫表3中也存在非關鍵欄位"標題"、"內容"對關鍵欄位"回復ID"的部分函數依賴,也不滿足第二範式的要求,但是與資料庫表2相似,這一設計也不會導致數據冗餘和操作異常。

由此可以看出,並不一定要強行滿足範式的要求,對於1:N關系,當1的一邊合並到N的那邊後,N的那邊就不再滿足第二範式了,但是這種設計反而比較好!

對於M:N的關系,不能將M一邊或N一邊合並到另一邊去,這樣會導致不符合範式要求,同時導致操作異常和數據冗餘。

對於1:1的關系,我們可以將左邊的1或者右邊的1合並到另一邊去,設計導致不符合範式要求,但是並不會導致操作異常和數據冗餘。

『伍』 資料庫老師會問哪些問題

1.MySQL 主鍵與索引的聯系與區別

主鍵是為了標識資料庫記錄唯一性,不允許記錄重復,且鍵值不能為空,主鍵也是一個特殊索引。

數據表中只允許有一個主鍵,但是可以有多個索引。

使用主鍵會資料庫會自動創建主索引,也可以在非主鍵上創建索引,方便查詢效率。

索引可以提高查詢速度,它就相當於字典的目錄,可以通過它很快查詢到想要的結果,而不需要進行全表掃描。

主鍵索引外索引的值可以為空。

主鍵也可以由多個欄位組成,組成復合主鍵,同時主鍵肯定也是唯一索引。

唯一索引則表示該索引值唯一,可以由一個或幾個欄位組成,一個表可以有多個唯一索引。

2.資料庫索引是怎麼回事?用的啥數據結構 為什麼B+樹比B樹更合適

一個索引是存儲的表中一個特定列的值數據結構(最常見的是B-Tree)。索引是在表的列上創建。所以,要記住的關鍵點是索引包含一個表中列的值,並且這些值存儲在一個數據結構中。請記住記住這一點:索引是一種數據結構 。

什麼樣的數據結構可以作為索引?

B-Tree 是最常用的用於索引的數據結構。因為它們是時間復雜度低, 查找、刪除、插入操作都可以可以在對數時間內完成。另外一個重要原因存儲在B-Tree中的數據是有序的。資料庫管理系統(RDBMS)通常決定索引應該用哪些數據結構。但是,在某些情況下,你在創建索引時可以指定索引要使用的數據結構。

當我們利用索引查詢的時候,不可能把整個索引全部載入到內存,只能逐一載入每個磁碟頁,磁碟頁對應索引樹的節點。那麼Mysql衡量查詢效率的標准就是磁碟IO次數。如果我們利用二叉樹作為索引結構,那麼磁碟的IO次數和索引樹的高度是相關的。

那麼為了提高查詢效率,就需要減少磁碟IO數。為了減少磁碟IO的次數,就需要盡量降低樹的高度,需要把原來「瘦高」的樹結構變的「矮胖」,樹的每層的分叉越多越好,因此B樹正好符合我們的要求,這也是B-樹的特徵之一。

B樹 B樹的節點為關鍵字和相應的數據(索引等)

B+樹 B+樹是B樹的一個變形,非葉子節點只保存索引,不保存實際的數據,數據都保存在葉子節點中,B+樹的葉子節點為鏈表,鏈表放數據,非葉子節點是索引。

對比:

  • B樹和B+樹同樣適用於高度越低,查詢越快。

  • B樹查找節點,B+樹只需要查詢所有節點(索引),B樹查詢索引和數據。雖然可能第一個就找到,但在極端情況下,需要全查詢索引和數據,不如B+樹穩定。

  • B+樹和B樹比,B+樹的硬碟空間更少,io的讀寫代價更低。因為B+樹節點只有索引,佔位更少。在查詢的情況下硬碟指針移動更低

  • 哈希表索引是怎麼工作的?

    哈希表是另外一種你可能看到用作索引的數據結構-這些索引通常被稱為哈希索引。使用哈希索引的原因是,在尋找值時哈希表效率極高。所以,如果使用哈希索引,對於比較字元串是否相等的查詢能夠極快的檢索出的值。例如之前我們討論過的這個查詢(SELECT * FROM Employee WHERE Employee_Name = 『Jesus』) 就可以受益於創建在Employee_Name 列上的哈希索引。哈系索引的工作方式是將列的值作為索引的鍵值(key),和鍵值相對應實際的值(value)是指向該表中相應行的指針。因為哈希表基本上可以看作是關聯數組,一個典型的數據項就像「Jesus => 0x28939″,而0x28939是對內存中表中包含Jesus這一行的引用。在哈系索引的中查詢一個像「Jesus」這樣的值,並得到對應行的在內存中的引用,明顯要比掃描全表獲得值為「Jesus」的行的方式快很多。

    哈希索引的缺點

    哈希表是無順的數據結構,對於很多類型的查詢語句哈希索引都無能為力。舉例來說,假如你想要找出所有小於40歲的員工。你怎麼使用使用哈希索引進行查詢?這不可行,因為哈希表只適合查詢鍵值對-也就是說查詢相等的查詢(例:like 「WHERE name = 『Jesus』)。哈希表的鍵值映射也暗示其鍵的存儲是無序的。這就是為什麼哈希索引通常不是資料庫索引的默認數據結構-因為在作為索引的數據結構時,其不像B-Tree那麼靈活

    3.創建索引的注意事項

    索引可以提高數據的訪問速度,但同時也增加了插入、更新和刪除操作的處理時間,解決此問題就是分析應用程序的業務處理、數據使用,為經常被用作查詢條件、或者被要求排序的欄位建立索引。索引是建立在資料庫表中的某些列的上面。因此,在創建索引的時候,應該仔細考慮在哪些列上可以創建索引,在哪些列上不能創建索引。

    創建規則:

  • 表的主鍵、外鍵必須有索引;

  • 數據量超過300的表應該有索引;

  • 經常與其他表進行連接的表,在連接欄位上應該建立索引;

  • 經常出現在Where子句中的欄位,特別是大表的欄位,應該建立索引;

  • 索引應該建在選擇性高的欄位上;

  • 索引應該建在小欄位上,對於大的文本欄位甚至超長欄位,不要建索引;

  • 復合索引的建立需要進行仔細分析;盡量考慮用單欄位索引代替

  • 頻繁進行數據操作的表,不要建立太多的索引;

  • 刪除無用的索引,避免對執行計劃造成負面影響;

  • 創建索引需要注意的地方:

  • 限製表上的索引數目。對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數據的更新操作。

  • 避免在取值朝一個方向增長的欄位(例如:日期類型的欄位)上,建立索引;對復合索引,避免將這種類型的欄位放置在最前面

  • 對復合索引,按照欄位在查詢條件中出現的頻度建立索引

  • 刪除不再使用,或者很少被使用的索引。

  • 4.MYSQL事務特性和實現原理

    ACID表示原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(rability)。一個很好的事務處理系統,必須具備這些標准特性:

    原子性(atomicity)

    一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾,對於一個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性

    是利用Innodb的undo log。undo log名為回滾日誌,是實現原子性的關鍵,當事務回滾時能夠撤銷所有已經成功執行的sql語句,他需要記錄你要回滾的相應日誌信息。

    一致性(consistency)

    資料庫總是從一個一致性的狀態轉換到另一個一致性的狀態。(在前面的例子中,一致性確保了,即使在執行第三、四條語句之間時系統崩潰,支票賬戶中也不會損失200美元,因為事務最終沒有提交,所以事務中所做的修改也不會保存到資料庫中。)

    資料庫通過原子性、隔離性、持久性來保證一致性

    隔離性(isolation)

    通常來說,一個事務所做的修改在最終提交以前,對其他事務是不可見的。(在前面的例子中,當執行完第三條語句、第四條語句還未開始時,此時有另外的一個賬戶匯總程序開始運行,則其看到支票帳戶的余額並沒有被減去200美元。)

    利用的是鎖和MVCC機制。MVCC,即多版本並發控制(Multi Version Concurrency Control),一個行記錄數據有多個版本對快照數據,這些快照數據在undo log中。如果一個事務讀取的行正在做DELELE或者UPDATE操作,讀取操作不會等行上的鎖釋放,而是讀取該行的快照版本。

    持久性(rability)

    一旦事務提交,則其所做的修改會永久保存到資料庫。(此時即使系統崩潰,修改的數據也不會丟失。持久性是個有占模糊的概念,因為實際上持久性也分很多不同的級別。有些持久性策略能夠提供非常強的安全保障,而有些則未必,而且不可能有能做到100%的持久性保證的策略。)

    是利用Innodb的redo log。當做數據修改的時候,不僅在內存中操作,還會在redo log中記錄這次操作。當事務提交的時候,會將redo log日誌進行刷盤(redo log一部分在內存中,一部分在磁碟上)。當資料庫宕機重啟的時候,會將redo log中的內容恢復到資料庫中,再根據undo log和binlog內容決定回滾數據還是提交數據。redo log體積小,刷盤快。redo log是一直往末尾進行追加,屬於順序IO。效率顯然比隨機IO來的快

    5.redis的原理和優點

    redis是一個key-value存儲系統.和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希類型)

    這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的.

    在此基礎上,redis支持各種不同方式的排序.與memcached一樣,為了保證效率,數據都是緩存在內存中.區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步.

    Redis的優點:

  • 性能極高 – Redis能支持超過 100K+ 每秒的讀寫頻率。

  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。

  • 原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並後的原子性執行。

  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

  • 6.Mysql中的鎖機制

    Mysql用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。這些鎖統稱為悲觀鎖

    MySQL的鎖機制比較簡單,其最 顯著的特點是不同的存儲引擎支持不同的鎖機制。比如,MyISAM和MEMORY存儲引擎採用的是表級鎖(table-level locking);BDB存儲引擎採用的是頁面鎖(page-level locking),但也支持表級鎖;InnoDB存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但默認情況下是採用行級鎖。

  • 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,並發度最低。

  • 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,並發度也最高。

  • 頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般

  • 從上述特點可見,很難籠統地說哪種鎖更好,只能就具體應用的特點來說哪種鎖更合適!僅從鎖的角度 來說:表級鎖更適合於以查詢為主,只有少量按索引條件更新數據的應用,如Web應用;而行級鎖則更適合於有大量按索引條件並發更新少量不同數據,同時又有 並發查詢的應用,如一些在線事務處理(OLTP)系統。

    7.ABC聯合索引生效問題

    對於復合索引:Mysql從左到右的使用索引中的欄位,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當最左側欄位是常量引用時,索引就十分有效。

    對於復合索引:Mysql從左到右的使用索引中的欄位,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當最左側欄位是常量引用時,索引就十分有效。

『陸』 資料庫中各種表的定義,如:主表,從表,主鍵,外鍵,主鍵表,外鍵表,他們之間的聯系,越詳細越好!

主表/父表 和 從表/子表 主鍵/外鍵都是相對而言的。

一個表的主鍵可以是另一個表的外鍵,相反也一樣。

主鍵,外鍵是關系資料庫的基礎。所謂『關系』就是主鍵,外鍵之間的聯系。

『柒』 資料庫中鍵的定義和作用

生活中每個人都有自己的特徵,用於區別其他人,比如姓名,身份證號,因為姓名可能有重復,區分每個人的時候都使用身份證號,比如辦銀行卡需要對應本人的身份證號,這樣可以把銀行卡跟人關聯起來。
資料庫中的數據(表示某個事物或對象)也是同樣,為了區分數據,類似人的身份證號,為數據定義一個鍵,跟身份證號一樣,這個鍵作用多多:比如可以確定這個數據跟其他數據是不一樣的,另外通過鍵可以跟其他類型數據關聯起來,用於其他復雜用途比如復雜查詢等

『捌』 資料庫裡面的主鍵和外鍵及候選鍵是什麼意思啊

1、主鍵(primary key)吧:一張表(關系)的一個列(屬性)或多個列可以作為主鍵,但是前提是讓這個列作主鍵,這個列就能保證該列下的各個行(元組)的值不能相同,比如說用姓名屬性作主鍵的話,那麼這個主鍵就不一定可以,如果有兩個人是同樣的名字的話,就不能做到該屬性下的各個元組數據的值不同,如果用阿拉伯數字作主鍵就是一個很好的選擇。
2、外鍵(foreign key):一張表(關系)的列(屬性)它同時存在表1和表2中,它不是表1的主鍵,而是表2的主鍵,就可以說他是表1的外鍵。
3、候選鍵(Candidate Key):能唯一標識表(關系)中行(元組)的列(屬性),則稱該屬性為候選鍵,也稱 候選關鍵字 或 候選碼;由此來看候選鍵可以不只一個,還看一看得出的就是主鍵同時它也是候選鍵。

『玖』 資料庫主鍵具體指哪項,有什麼作用

主鍵:
關系資料庫依賴於主鍵---它是資料庫物理模式的基石。主鍵在物理層面上只有兩個用途:
1.
惟一地標識一行。
2.
作為一個可以被外鍵有效引用的對象。
基於以上這兩個用途,下面給出了我在設計物理層面的主鍵時所遵循的一些原則:
1.
主鍵應當是對用戶沒有意義的。如果用戶看到了一個表示多對多關系的連接表中的數據,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。
2.
主鍵應該是單列的,以便提高連接和篩選操作的效率。
註:使用復合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應當具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞資料庫提供了方便。其二是利用這種方法可以在描述多對多關系的連接表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復合主鍵常常導致不良的外鍵,即當連接表成為另一個從表的主表,而依據上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表主鍵的一部分,如此傳遞下去,越靠後的從表,其主鍵將會包含越多的列了。
3.
永遠也不要更新主鍵。實際上,因為主鍵除了惟一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。
註:這項原則對於那些經常需要在數據轉換或多資料庫合並時進行數據整理的數據並不適用。
4.
主鍵不應包含動態變化的數據,如時間戳、創建時間列、修改時間列等。
5.
主鍵應當有計算機自動生成。如果由人來對主鍵的創建進行干預,就會使它帶有除了惟一標識一行以外的意義。一旦越過這個界限,就可能產生認為修改主鍵的動機,這樣,這種系統用來鏈接記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
外鍵是資料庫一級的一個完整性約束,就是資料庫基礎理論書中所說的「參照完整性」的資料庫實現方式。
外鍵屬性當然是可以去掉的,如果你不想再用這種約束,對編程當然不會有什麼影響,但相應的錄入數據的時候就不對錄入的數據進行「參照完整性」檢查了。
例如有兩個表
a(a,b)
:a為主鍵,b為外鍵(來自於b.b)
b(b,c,d)
:b為主鍵
如果我把欄位b的外鍵屬性去掉,對編程沒什麼影響。
如上面,a中的b要麼為空,要麼是在b的b中存在的值,有外鍵的時候,資料庫會自動幫你檢查a的b是否在b的b中存在。

『拾』 資料庫中什麼是主鍵,什麼是外鍵

主鍵(Primary key): 也稱為主碼或主關鍵字,用於惟一地確定一個元組的屬性或屬性組(復合主碼)。每個關系都有一個並且只有一個主碼。

外鍵(Foreign Key):也稱為外碼或外部關鍵字。如果一個屬性集不是所在關系的關鍵字,但是是其他關系的關鍵字,則該屬性集稱為外部關鍵字。

在關系資料庫中可以通過外鍵使兩個關系關聯,這種聯系通常是一對多(1:n)的,其中主(父)關系(1方)稱為被參照關系,從(子)關系(n方)稱為參照關系。

(10)資料庫從鍵擴展閱讀:

資料庫主鍵作用:

1、保證實體的完整性

2、加快資料庫的操作速度

3、在表中添加新記錄時,DBMS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復。

4、DBMS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。

在有些資料庫中,雖然主鍵不是必需的,但最好為每個表都設置一個主鍵,不管是單主鍵還是復合主鍵。它存在代表著表結構的完整性,表的記錄必須得有唯一區分的欄位,主鍵主要是用於其他表的外鍵關聯,以及本記錄的修改與刪除。

熱點內容
安卓手機安裝好圖標包如何使用 發布:2024-04-18 22:00:23 瀏覽:451
國際服刺激戰場怎麼在伺服器上 發布:2024-04-18 21:55:48 瀏覽:535
怎樣購買蘋果存儲空間 發布:2024-04-18 21:51:47 瀏覽:434
web伺服器怎麼搭建手機 發布:2024-04-18 21:46:19 瀏覽:800
伺服器與普通電腦裝系統區別 發布:2024-04-18 21:46:01 瀏覽:528
第一彈視頻緩存 發布:2024-04-18 21:24:08 瀏覽:732
飽和溶液的電極如何配置 發布:2024-04-18 21:15:39 瀏覽:202
ftp網站下載工具 發布:2024-04-18 21:02:45 瀏覽:48
我的世界手游友好的伺服器 發布:2024-04-18 20:57:20 瀏覽:474
php用什麼打開 發布:2024-04-18 20:09:36 瀏覽:732