關係型數據庫MySQL
數據庫簡介
人類在進化的過程中,創造了數字、文字、符號等來進行數據的記錄,但是承受着認知能力和創造能力的提 升,數據量越來越大,對於數據的記錄和準確查找,成爲了一個重大難題。數據庫系統解決的問題:持久化存儲,優化讀寫,保證數據的有效性。
計算機誕生後,數據開始在計算機中存儲並計算,並設計出了數據庫系統。常見的數據庫如下:
數據庫分類
關係型數據庫:指採用了關係模型來組織數據的數據庫。關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。主流的關係型數據庫有:
Oracle、Microsoft SQL Server、MySQL、PostgreSQL,SQLite、MariaDB(MySQL的一個分支)、Microsoft Access、SAP。
非關係型數據庫:指非關係型的,分佈式的,以鍵值對存儲且結構不固定,可以減少一些時間和空間的開銷。非關係型數據庫都是針對某些特定的應用需求,主要分爲以下幾類:
1). 面向海量數據訪問的面向文檔數據庫:MongoDB、Amazon DynamoDB、Couchbase等。
2). 面向高性能併發讀寫的key-value數據庫: Redis、 Memcached等。
3). 面向搜索數據內容的搜索引擎:Elasticsearch,Splunk,Solr,MarkLogic和Sphinx等。
4). 面向可擴展性的分佈式數據庫:Cassandra,HBase等
關係型數據庫
E-R模型
當前物理的數據庫都是按照E-R模型進行設計的,
• E表示entry,實體
• R表示relationship,關係
• 一個實體轉換爲數據庫中的一個表
關係描述兩個實體之間的對應規則,包括: 一對一 ,一對多, 多對多
三大範式
經過研究和對使用中問題的總結,對於設計數據庫提出了一些規範,這些規範被稱爲範式
• 第一範式(1NF):列不可拆分 , 即無重複的域。
符合第一範式的特點就有:有主關鍵字、主鍵不能爲空、主鍵不能重複,字段不可以再分。
如下圖就不符合第一範式的列不可拆分!!!
正確的應該爲:
• 第二範式(2NF):唯一標識 ,即擁有實體的唯一標識(eg: 身份證、id號等)。
第二範式是指每個表必須有且僅有一個數據元素爲主關鍵字(Primary key),其他數據元素與主關鍵字一一對應。這種關係爲函數依賴。
符合第二範式的特點就有:滿足第一範式的前提下,消除部分函數依賴。
上圖也不符合第二範式。 因爲班級地址部分依賴於關鍵字班級編號, 所以要變爲兩個表:
數據冗餘過大,插入異常,刪除異常,修改異常的問題,如下表所示:
1). 每一名學生的學號、姓名、系名、系主任這些數據重複多次。每個系與對應的系主任的數據也重複多次 數據冗餘過大
2). 假如學校新建了一個系,但是暫時還沒有招收任何學生,那麼是無法將系名與系主任的數據單獨地添加到數據表中去的 插入異常
3). 假如將某個系中所有學生相關的記錄都刪除,那麼所有系與系主任的數據也就隨之消失了。刪除異常
4). 假如李小明轉系到法律系,那麼爲了保證數據庫中數據的一致性,需要修改三條記錄中系與系主任的數據。修改異常
正確的如下:
• 第三範式(3NF):引用主鍵 ,即每列數據都與主鍵直接相關。
說明:關係型數據庫有六種範式。一般說來,數據庫只需滿足第三範式(3NF)就行了
符合第三範式的特點就有:不存在非主屬性對碼的傳遞性依賴以及部分性依賴 。
如下:
不符合第三範式,但完全滿足了第二範式。因爲獎金等級和獎學金存在傳遞依賴,更改爲:
三大範式只是一般設計數據庫的基本理念,可以建立冗餘較小、結構合理的數據庫。如果有
特殊情況,當然要特殊對待,數據庫設計最重要的是看需求跟性能,需求>性能>表結構。
所以不能一味的去追求範式建立數據庫。
Mysql簡介與安裝
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一。
MySQL常用存儲引擎分析
數據庫存儲引擎是數據庫底層軟件組織,進行創建、查詢、更新和刪除數據。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能, MySQL的核心就是存儲引擎。
MySQL查詢存儲引擎SQL語句:SHOW ENGINES
mysql的安裝
1.Redhat下安裝mariadb
數據庫服務管理
安全性密碼設置
允許遠程連接
找回密碼
2.Ubuntu下安裝mariadb
sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-get install mariadb-server
記錄一下,我在Ubuntu下安裝mariadb遇到的問題:
1).apt-get update 出現E: Could not get lock /var/lib/apt/lists/lock
$ sudo apt-get update Reading package lists... Done E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable) E: Unable to lock directory /var/lib/apt/lists/
原因:
資源鎖被別的進程佔用
解決辦法:
方法一:kill掉佔用資源的進程(推薦使用)
$ ps -e | grep apt
2708 ? 00:00:00 apt.systemd.dai
2713 ? 00:00:00 apt.systemd.dai
查看哪些進程在佔用資源
從以上的結果看到 佔用資源的的PID(進程號)是2708和2713,那麼kill掉這兩個進程即可
$ sudo kill -9 2708 2713
方法二: 重啓釋放資源
$ sudo reboot
參考:https://blog.csdn.net/zyxlinux888/article/details/6358615
2).sudo apt-get update 失敗
我一開始以爲是網速問題,但是真的update一整天都還失敗時,我纔想起查查別人怎麼處理這種問題。
原因:有兩種可能,一個是被牆了——換成國內源即可; 另一個是因爲architecture不兼容——刪掉不兼容的architecture
方法一:換源
cd /etc/apt
sudo cp sources.list sources.list.bak
sudo gedit sources.list
換成清華鏡像源,sources.list 的內容更改如下:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
再執行sudo apt-get update,即可。
很幸運,我失敗的原因就是這一種,所以更換了源之後,update成功。
方法二:移除不兼容的architecture(這個方法我沒有嘗試,但是留作備用)
sudo dpkg --print-architecture
sudo dpkg --print-foreign-architectures
如果是開發板,就需要移除amd64; 如果是PC機,就需要移除arm64;
以 jetson Tx2爲例,如果打印出現 amd64,那就移除它
sudo apt-get remove .*:amd64
sudo dpkg --remove-architecture amd64
sudo apt-get update
千萬不要刪錯了,不然可以考慮重裝系統了
最後update時出現一些抓取不到的404問題,沒有關係,可以正常apt-get install
參考:https://blog.csdn.net/qq_35759574/article/details/82862827
3.Windows下安裝mysql
下面是msi安裝文件,自提!
鏈接: https://pan.baidu.com/s/1LVcMYT9zFXp64E43jDpzFA 提取碼: wdbd
安裝教程csdn有很多,按照步驟走即可。
此外,我還安裝了圖形界面操作mysql的軟件Navicat 12.安裝沒有問題,但是在連接mysql時,有遇到問題,也記錄一下。
1.出現錯誤代碼2059
解決方法:https://blog.csdn.net/debimeng/article/details/94961432
2.用pycharm連接mysql連接不上,出現報錯:Server returns invalid timezone.Go to ‘Advanced’ tab and set ‘serverTimezon’
解決方法:https://blog.csdn.net/qq_39397165/article/details/103433994