數據庫介紹
關系型數據庫
(1)關系型數據庫介紹
關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(既二維格式表)。例如宏福教育某一期的學生關系就是一個二元關系,在關系型數據庫中,對數據的操作幾乎全部建立在一個或多個關系表上,通過對這些關聯表格分類,合並,連接或選取等運算來實現數據的管理。
關系型數據庫誕生距今已經有40多年了,從理論產生發展到現實產品,例如:大家最常見的mysql和oracle數據庫,oracle在數據庫領域里上升到了霸主的地位,形成每年高達數百億美元的龐大產業市場,而mysql也是不容忽視的數據庫,以至於被oracle中心收購了。
(2)關系型數據庫表之間的關系列舉
非關系型數據庫(nosql)
非關系型數據庫也稱之為nosql數據庫,請注意,nosql的本意是“not only SQL”,指的是非關系型數據庫,而不是“no SQL”的意思,因此nosql的產生並不是要徹底否定關系型數據庫,而是作為傳統關系型數據庫的一個有效補充,NoSQL數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。
隨着互聯網的興起,超大規模和高並發量的微博,微信,SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,例如:傳統的關系型數據庫IO瓶頸,性能瓶頸都難以有效突破,於是開始出現了大批針對特定場景,以高性能和使用便利為目的的功能特異化的數據庫產品,NoSQL類的數據庫就是在這樣的情景中誕生並得到了非常迅速的發展
NoSQL是非關系型數據庫的廣義定義。它打破了長久以來關系型數據庫與ACID理論大一統的局面,NoSQL數據存儲不需要固定的表結構,通常也不存在連接操作,在大數據存取上具備關系型數據庫無法比擬的性能優勢,該術語(NoSQL)在2009年初得到了廣泛的認同
google的BigTable與Amazon的Dynamo是非常成功的商業NoSQL,一些開源的NoSQL體系,如
Redis, mongodb也逐漸的越來越受到各大中小型企業的歡迎和追捧
一、關系型數據庫
關系型數據庫最典型的數據結構是表,由二維表及其之間的聯系所組成的一個數據組織
優點:
- 易於維護:都是使用表結構,格式一致;
- 使用方便:SQL語言通用,可用於復雜查詢;
- 復雜操作:支持SQL,可用於一個表以及多個表之間非常復雜的查詢。
缺點:
- 讀寫性能比較差,尤其是海量數據的高效率讀寫;
- 固定的表結構,靈活度稍欠;
- 高並發讀寫需求,傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸。
二、非關系型數據庫
非關系型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合,可以是文檔或者鍵值對等。
優點:
- 格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型。
- 速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤;
- 高擴展性;
- 成本低:nosql數據庫部署簡單,基本都是開源軟件。
缺點:
- 不提供sql支持,學習和使用成本較高;
- 無事務處理;
- 數據結構相對復雜,復雜查詢方面稍欠。
常見的數據庫
非關系型數據庫(nosql):mongodb,redias
關系型數據庫:oracle,db2,sqlserver,mysql,mariadb
Mariadb發源
MySQL之父Widenius先生離開了Sun之后,覺得依靠Sun/Oracle來發展MySQL,實在很不靠譜,於是決定另開分支,這個分支的名字叫做MariaDB。
RDBMS
Relational Database Management System
- sql語句主要分為:
- DQL:數據查詢語言,用於對數據進行查詢,如select
- DML:數據庫操作語言,對數據庫進行增刪改查,如:insert,update,delete
- TPL:事物處理語言,對事物進行處理,包括begin,transaction,commit,rollback
- DCL:數據控制語言,如grant,revoke
- DDL:數據定義語言:進行數據庫,表的管理等,如create,drop
- CCL:指針控制語言,通過控制指針完成表的操作,如declare cursor
- sql是一門特殊的語言,專門用來操作關系型數據庫
- 不區分大小寫
mariadb安裝 [mariadb] name = MariaDB baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/ gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 忘記mysql的root密碼 vim /etc/my.conf.d/server.conf 添加skip-grant-tables mysql -uroot | mysql -u root -p 查看數據庫 show databases; #查看創建數據庫狀態 show create database testdb; #使用哪個庫 use testdb 修改數據庫 create database test03 #創建數據庫 create database testdb character set utf8; #刪除數據庫 drop database testdb; #修改數據庫默認字符集 alter database 庫名 default character set utf8; #查看當前用戶 select user(); #給aaa添加查詢,創建,更新,刪除的權限(在任意主機上) grant select,create,update,delete on test03.grade to aaa@'%';
#給aaa賦予test03數據庫的grade表最高權限(在任意主機上) grant all privileges on test03.grade to aaa@'%'; #查看aaa用戶的權限(root用戶) show grants for 'aaa'; #收回aaa在任意數據庫的任意表的最高權限 revoke all on *.* from aaa@'%'; #查看自己權限
show grants