mariadb資料庫筆記
資料庫介紹
1.什麼是資料庫?
簡單的說,資料庫就是一個存放資料的倉庫,這個倉庫是按照一定的資料結構(資料結構是指資料的組織形式或資料之間的聯絡)來組織,儲存的,我們可以通過資料庫提供的多種方法來管理資料庫裡的資料
更簡單的理解形象,資料庫和我們生活追蹤存放雜物的儲物間倉庫性質一樣,區別只是存放的東西不通,雜物間存放實體的物件,而資料庫裡儲存的是資料,這樣我們就對資料庫有一個初步瞭解了。
資料庫誕生於1950年,隨著資訊科技的發展和人類社會的不斷進步,特別是2000年後,資料庫不在僅僅是儲存和管理資料了,而轉變成使用者所需要的各種資料管理的方式,資料庫有很多種類和功能,從最簡單的儲存有各種資料的表格到能夠進行海量資料儲存的大型資料庫系統都在各個方面得到了廣泛的應用。
資料庫的種類
按照早起的資料庫理論,比較流行的資料庫模型有三種,分別為層次式資料庫,網路式資料庫和關係型資料庫,而在當今的網際網路中,最常見的資料庫模型主要是兩種,即關係型資料庫和非關係型資料庫
關係型資料庫
(1)關係型資料庫的由來
雖然網狀資料庫和層次資料庫已經很好的解決了資料的集中和共享問題,但是在資料獨立性和抽象級別上仍有很大欠缺,使用者在對這兩種資料庫進行存取時,仍然需要明確資料庫的儲存結構,支出存取路徑,而關係型資料庫就可以很好的解決這些問題
(2)關係型資料庫介紹
關係型資料庫模型是把複雜的資料結構歸結為簡單的二元關係(既二維格式表)。例如巨集福教育某一期的學生關係就是一個二元關係,在關係型資料庫中,對資料的操作幾乎全部建立在一個或多個關係表上,通過對這些關聯表格分類,合併,連線或選取等運算來實現資料的管理。
關係型資料庫誕生距今已經有40多年了,從理論產生髮展到現實產品,例如:大家最常見的mysql和oracle資料庫,oracle在資料庫領域裡上升到了霸主的地位,形成每年高達數百億美元的龐大產業市場,而mysql也是不容忽視的資料庫,以至於被oracle中心收購了。
(3)關係型資料庫表之間的關係列舉
非關係型資料庫(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也逐漸的越來越受到各大中小型企業的歡迎和追捧
非關係型資料庫的種類
鍵值(key-value)儲存資料
鍵值資料庫就類似傳統語言中使用的雜湊表,可以通過key來新增,查詢或者刪除資料,因為使用key主鍵訪問,所以會獲得很高的效能及擴充套件性
鍵值(key-value)資料庫主要是使用一個雜湊表,這個表中有一個特定的鍵和一個指標指向特定的資料,key/value模型對於IT系統來說的優勢在於簡單,易部署,高併發
#重點
常見的資料庫
非關係型資料庫(nosql):mongodb,redias
關係型資料庫:oracle,db2,sqlserver,mysql,mariadb
Mariadb發源
MySQL之父Widenius先生離開了Sun之後,覺得依靠Sun/Oracle來發展MySQL,實在很不靠譜,於是決定另開分支,這個分支的名字叫做MariaDB。
MariaDB跟MySQL在絕大多數方面是相容的,對於開發者來說,幾乎感覺不到任何不同。目前MariaDB是發展最快的MySQL分支版本,新版本釋出速度已經超過了Oracle官方的MySQL版本。
在Oracle控制下的MySQL開發,有兩個主要問題:1. MySQL核心開發團隊是封閉的,完全沒有Oracle之外的成員參加。很多高手即使有心做貢獻,也沒辦法做到。2. MySQL新版本的釋出速度,在Oracle收購Sun之後大為減緩。Widenius有一個ppt,用資料比較了收購之前和之後新版本的釋出速度。有很多bugfix和新的feature,都沒有及時加入到釋出版本之中。
表(Table) 特定型別資料的結構化列表
表是結構化的檔案,用來儲存特定型別的資料,表可能儲存客戶清單,產品目錄,或者其他資訊列表。
儲存在表中的資料是一種型別的資料或一個列表,絕對不應該將顧客的列表資訊和訂單的列表資訊儲存到同一個資料庫表中,
這樣做會使隨後的資料檢索和訪問變得困難,代替的解決方案是建立兩個表,在每個表中儲存其相應的列表資訊。
資料庫中每個表都有一個名字來標識它,
並且在一個數據庫中表名是唯一的
列( Column):表中的一個欄位,表由一列或多列構成,列中儲存表的一部分資訊
每一列儲存一條特定資訊。例如在客戶表中,一列儲存客戶編號,另一列儲存客戶姓名,
而地址,城 市,州,郵政編碼儲存在各自的列中。資料庫中每一列都有相應的資料型別,
資料型別定義了該列可以儲存哪種型別的資料。例如,如果某列要儲存數字,就應該使用numeric資料型別。
如果某列儲存日期,文字,提示,金額等 就需要用恰當的資料型別來指定。
行( Row):表中的一條記錄
表中的資料儲存在行裡,把表當做類似電子表格的網格,在網格中垂直的列就是表的列 ,水平的行就是表的行。
例如,客戶表可能在每一行儲存一個客戶,表中行的數量也就是表中記錄的條數。
注: NULL 在SQL中NULL用來指代空值( no value),如果一列被定義為允許為NULL,
當插入或者更新行時,可以忽略該列的資料。
MySQL的埠號:3306
mariadb安裝
#cd /etc/yum.repos.d/
#touch mariadb.repo
#vim mariadb.repo
[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
#yum -y install MariaDB-server
#systemctl start mariadb | mysql.service #啟動服務
忘記mysql的root密碼
#vim /etc/my.cnf.d/server.conf
新增skip-grant-tables #跳過密碼
#mysql -uroot | mysql -u root -p #登入
檢視資料庫資訊
>show databases; #檢視資料庫
#mysqladmin –version #檢視資料庫版本
>show create database mysql; #檢視建立資料庫狀態
>use_name; #使用哪個庫
修改資料庫
>create database test03; #建立資料庫
>drop database test03; #刪除資料庫
>alter database 庫名 default character set=utf8; #修改資料庫預設字符集支援中文
使用者管理
>select user(); #檢視當前使用者
>mysqladmin -uroot -proot password aaabbb; #修改密碼
>grant select,create,update,delete on test03.grade to 'aaa'@'%';
#給aaa新增查詢,建立,更新,刪除的許可權(在任意主機上)
>grant all privileges|usage on test03.grade to 'aaa'@'%';
# test03:資料庫名字 .:資料庫裡的表 grade:表的名字 aaa:使用者名稱
# %:本地和第三方都允許的登陸模式 localhost:本地登入登陸模式 @:分隔符
# 給aaa賦予test03資料庫的grade表 最高|最低 許可權(在任意主機上)
>show grants for 'aaa'; #檢視aaa使用者的許可權(root使用者)
>revoke all on *.* from 'aaa'@'%'; #收回aaa在任意資料庫的任意表的最高許可權
>show grants; #檢視許可權(用root檢視)
擴充套件:
>create user bbb identified by bbb; #建立一個bbb使用者,密碼為bbb
mysql> update user set password=password(‘root’) where user=’root’;
# 更新使用者設定密碼=使用者的密碼root設定給使用者root
mysql> flush privileges; #重新載入許可權表
quit #退出
註釋掉/etc/my.cnf.d/server.conf檔案中的
skip-grant-tables
# systemctl restart mysqld.service #重啟服務: