標籤:style io 使用 java ar strong for 檔案 資料
【mysql】
mysql是目前最主流的跨平台、開放原始碼的關係型資料庫,由瑞曲的mysql ab公司開發,已經被SUN公司收購,標識是一隻名為sakila的海豚,代表mysql的速度、能力、精確優秀品質,mysql速度快、體積小、成本低、開放原始碼。
mysql優點:
1 功能強大:提供多種資料庫儲存引擎,可以處理每天數億次訪問。支付事務、視圖、預存程序、觸發器
2 跨平台:基本上支援所有平台。包括linux window freeBSD IBMAIX等,可以在任何平台下編寫而不用做任何修改而進行遷移
3 速度快:使用快速的B速磁碟表(MyISAM)和索引壓縮,通過最佳化的單掃描多連結,實現快速連結。mysql函數使用高度最佳化類庫實現,速度極快
4 安全性高:靈活和安全的許可權和密碼系統,串連到伺服器時所有密碼傳輸均採用加密方式,從而保證密碼安全
5 mysql完全免費,使用者直接從網上下載使用
6 支援各種開發語言:mysql為主流的程式提供支援,為他們提供API函數,包括PHP,asp.NET,JAVA,Python,perl,ruby等
7 支援大容量儲存:儲存大小由作業系統對檔案大小的限制決定,mysql內部不做限制
【資料庫命名規則】
1不能與其他庫重名
2名稱以字母、數字、底線、??符號構成,不能使用單獨數字
3長度不可以超過64個字元
4不能使用mysql關鍵字
5windows中資料庫名,表名不區分大小寫,linux下區分,所以建意使用小寫資料庫或表名
【資料庫的三範式】
第一範式:內容相似的資料列必須消除(“清除”的辦法是再建立一個資料表來存放);
必須為每一組相關資料分別建立一個資料表;
每條資料記錄必須用一個主鍵來標識;
第二範式:只要資料列裡的內容出現重複,就意味著應該把資料表拆分為多個子表;
拆分出來的資料表必須用外部索引鍵關聯起來;.
第三範式:與主鍵沒有直接關係的資料列必須消除(“消除”的辦法是再建立一個資料表來存放)
第一範式:若關係模式R的每一個屬性是不可再分解的,再屬於第一範式。
第二範式:若R屬於第一範式,且所有的非碼屬性都完全函數依賴於碼屬性,則為第二範式。
第三範式:若R屬於第二範式,且所有的非碼屬性沒有一個是傳遞函數依賴於候選碼,則屬於第三範式
一個好的資料庫設計方案應該滿足以下幾項要求:
資料表裡沒有重複冗餘的資料;
資料表裡沒有 order1, order2, order3等重複的資料列;
資料表的空間佔用總量越小越好;
使用頻率高的查詢都能以簡單高效的方式執行。
【主鍵與外鍵】
資料表之間抽象的關聯/參考關聯性是依靠具體的主鍵和外鍵建立起來的。
主鍵:主鍵的作用是協助MySQL以最快的速度把一條特定的資料記錄在資料表裡的位置確定下來。主鍵必須是唯一的,任意兩條資料記錄裡的主鍵欄位絕不允許是同樣的內容;主鍵都必須有索引(即“主索引”);
外鍵:外鍵的作用是引用另一個資料表的某條記錄;
【索引】
為了在一個資料表裡檢索某個特定的記錄,或者提取一系列資料記錄,MySQL必須把這個資料表裡的所有資料記錄都搜尋一遍。如果資料表的體積比較龐大,在遇到這樣一些查詢的時候效能就會顯著的下降。為解決效能下降的問題可以為查詢所涉及的資料列建立並使用一個索引。
注意:索引可以加快資料的檢索操作,但會使資料修改操作變慢。每修改一條資料記錄,索引就必須重新整理一次。
索引另一個明顯缺陷是它們會在硬碟上佔用相當大的空間。因此,應該只為最經常查詢和最經常排序的資料列建立索引。
1.普通索引: 普通索引的唯一任務就是加快對資料的訪問速度。因此應該只為那些最經常出現在查詢條件(WHERE column=…)或排序條件(ORDER BY column)中的資料列建立索引。
2.唯一索引: 在許多時候,人們建立唯一索引的目的往往不是為了提高訪問速度,而只是為了避免資料出現重複。也就是說唯一索引可以保證資料的唯一性。
3.主索引:主索引是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主索引;
【SQL命令可以分類以下三大類別】
DML(Data Manipulation Language 資料處理語言):這類命令主要包括 SELECT、INSERT、UPDATE、DELETE等用來從資料表讀出資料,把資料存入資料表或是對資料表裡的現有記錄進行修改的命令;
DDL(Data Definition Language 資料定義語言 (Data Definition Language)):這類命令主要包括CREATE TABLE、ALTER TABLE 等用來定義和改變資料庫結構的命令;
DCL(Data Control Language 資料控制語言):這類命令主要包括GRANT、REVOKE以及另外幾個用來協助人們設定和調整MySQL存取控制機制的SQL命令;
【資料庫中的事務是什麼】?
事務就是一系列的操作,這些操作完成一項任務。只要這些操作裡有一個操作沒有成功,事務就操作失敗,發生復原事件。即撤消前面的操作,這樣可以保證資料的一致性。而且可以把操作暫時放在緩衝裡,等所有操作都成功有提交資料庫,這樣保證費時的操作都是有效操作。
【三種類型的資料庫】
1、階層型資料庫:以樹狀形式定義資料結構,通過樹型結構對資料進行操作,父記錄擁有多個子記錄,子記錄只有一個父記錄。階層型資料庫思想簡單,但會造成大量資料冗餘。
2、網路型資料庫:與階層資料庫類似,不同點是每個子記錄可以有多個父記錄,解決了階層資料庫的問題,但是操作資料時也會很麻煩。
3、關聯式資料庫:是建立在關聯式模式基礎上的資料庫。現實世界中的各種實體以及實體之間的各種聯絡均用關聯式模式來表示。標準資料查詢語言SQL就是一種基於關聯式資料庫的語言,對關聯式資料庫中資料的檢索和操作。
【data中的三種檔案類型】
*.frm是描述了表的結構,
*.MYD儲存了表的資料記錄,
*.MYI則是表的索引
【悲觀鎖和樂觀鎖】
商務邏輯的實現過程中,往往需要保證資料訪問的排他性。如在金融系統的日終結算處理中,我們希望針對某個時間點的資料進行處理,而不希望在結算進行過程中(可能是幾秒種,也可能是幾個小時),資料再發生變化。此時,我們就需要通過一些機制來保證這些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 “ 鎖 ” ,即給我們選定的目標資料上鎖,使其無法被其他程式修改。
悲觀鎖,正如其名,它指的是對資料被外界(包括本系統當前的其他事務,以及來自外部系統的交易處理)修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制(也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改資料)。 通常是使用for update子句來實現悲觀鎖機制。
觀鎖大多數情況下依靠資料庫的鎖機制實現,以保證操作最大程度的獨佔性。但隨之而來的就是資料庫效能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受。 如一個金融系統,當某個操作員讀取使用者的資料,並在讀出的使用者資料的基礎上進行修改時(如更改使用者帳戶餘額),如果採用悲觀鎖機制,也就意味著整個操作過程中(從操作員讀出資料、開始修改直至提交修改結果的全過程,甚至還包括操作員中途去煮咖啡的時間),資料庫記錄始終處於加鎖狀態,可以想見,如果面對幾百上千個並發,這樣的情況將導致怎樣的後果。
樂觀鎖:相對悲觀鎖而言,樂觀鎖機制採取了更加寬鬆的加鎖機制。樂觀鎖,大多是基於資料版本( Version )記錄機制實現。何謂資料版本?即為資料增加一個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加一個 “version” 欄位來實現。
MySql資料庫1【概念】