mysql的起源 資料庫(二),資料庫起源

2021-10-18 11:46:35 字數 1921 閱讀 6011

資訊系統

現在需要開發一套資訊系統, 記錄系裡的學生、課程、 還有選課資訊。比如

學生資訊:[學號,姓名,性別,身份證號,入學日期,班級]

課程資訊:[課程號,課程名,授課老師]

選課:[學號,課程號,成績]

然後程式只需要讀寫這三個檔案就可以了。

中間層的引入

到了期末,各個老師希望能進行一些統計的工作,比如哪些人不及格,某學科的平均分等等。實際上就是對檔案進行查詢而已。如果每次都使用程式來進行操作,非常麻煩,而且不利於普及。

所以我們可以提供乙個中間層,把檔案層遮蔽掉,讓每個人都可以在這個中間層用簡單的方法進行查詢。我們把資料存放的結構叫表,每一列叫列、字段、屬性。

可以使用簡單的sql語句就能查詢

select 學號,姓名

from 學生資訊

where 入學日期='1991-9-1'

然後需要乙個解析器,可以把語句轉換為內部對檔案的操作。這樣還可以使用程式來呼叫抽象層來程式設計啊, 也不用直接操作檔案了

使用這樣的sql語句最大的好處是使用者完全不用考慮物理層的那些檔案的結構,只需要關注邏輯層的「表」就可以了。

中間的邏輯層的另外的好處是可以對物理層的檔案儲存進行優化了, 為了加快訪問速度, 可以增加了索引、b+樹,快取等手段。

總結起來,中間層的好處在於:

對使用者遮蔽了底層邏輯,只需要通過sql語句就可以進行操作了。

還可以對物理層的檔案儲存進行優化,加快訪問速度。

併發訪問

之前的訪問都是單機版的,但是如果有若干的客戶端連入呢?可能會存在

兩個客戶端同時對乙個檔案進行修改,所以後修改的會完全覆蓋前人的修改。

兩個客戶端同時對一行資料進行修改,會出現資料不一致。

那麼怎麼辦呢?

基於檔案的操作改變成基於行的操作, 每個人的修改只影響這一行。 這樣縱然兩個人同時修改乙個檔案,只要不在同一行都沒毛病。

修改某行資料的時候,要先給這一行加鎖。也就是乙個人修改的時候,不允許另乙個人修改。

原子性問題

現在我們已經解決了併發寫的帶來的資料不一致的問題,那麼還有沒有其他的風險點呢?系統故障。

比如電子系有1000元, 數學系有2000元

電子系給數學系轉賬200元, 系統先扣除了電子系的錢,現在餘額只有800 ,此時系統崩潰了。

重啟以後,就發現電子系的餘額是對的, 可是數學系還是2000元, 那200元丟了

所以轉賬的操作必須是原子的: **要麼全部發生, 要麼根本不發生。 **

可以把類似轉賬這樣的操作叫做「事務」, 但是怎麼實現呢?記錄日誌

在做真正的操作之前,

先記錄日誌:要修改哪一項,原來的值是什麼,現在的值是什麼

然後再修改

只有所有的操作都正確無誤寫入了磁碟,才會提交。否則就回滾

許可權管理

乙個沒有許可權控制的系統是非常危險的, 尤其是隨意刪除。

先定義三大類許可權:

對資料操作的, 例如select, update, insert等

對結構操作的, 例如建立表,修改表,等

做管理的, 例如備份資料, 建立使用者等

然後就可以把這些許可權授予某個使用者了

grant select on 財務表 to 系主任 #只能查詢。

grant create_table to 張老師:#可以建立**

這個系統的中間層完全可以剝離出來,形成乙個完整的軟體了,也就是資料庫

參考

資料庫(二),資料庫起源

現在需要開發一套資訊系統,記錄系裡的學生 課程 還有選課資訊。比如 可以使用三個獨立的文字檔案來儲存這些資訊,比如學生資訊 然後程式只需要讀寫這三個檔案就可以了。到了期末,各個老師希望能進行一些統計的工作,比如哪些人不及格,某學科的平均分等等。實際上就是對檔案進行查詢而已。如果每次都使用程式來進行操...

Mysql 資料庫(二)

一 儲存引擎 什麼是儲存引擎 在資料庫中,表的型別是不同的,而儲存引擎就是表的型別。針對不同的儲存引擎,資料庫也有不同的處理方法。show engines 檢視乙個儲存引擎。常用的儲存引擎 innodb 支援事物,支援事物安全表,支援行鎖定和外來鍵。什麼是事物 單個邏輯單元的執行的一系列操作,要麼都...

mysql資料庫效能資料 MYSQL資料庫效能優化

1.選取最適用的字段屬性 表中字段的寬度設得盡可能小 char 的上限為 255 位元組 固定占用空間 varchar 的上限 65535 位元組 實際占用空間 text 的上限為 65535。盡量把字段設定為 not null,執行查詢的時候,資料庫不用去比較 null 值。2.使用連線 join...