知道本身學的什麼版本的數據庫mysql
mariadb版本:10.3linux
簡單的說,數據庫就是一個存放數據的倉庫,這個倉庫是按照必定的數據結構(數據結構是指數據的組織形式或數據之間的聯繫)來組織,存儲的,咱們能夠經過數據庫提供的多種方法來管理數據庫裏的數據web
更簡單的理解形象,數據庫和咱們生活追蹤存放雜物的儲物間倉庫性質同樣,區別只是存放的東西不通,雜物間存放實體的物件,而數據庫裏存儲的是數據,這樣咱們就對數據庫有一個初步瞭解了。面試
數據庫誕生於1950年,隨着信息技術的發展和人類社會的不斷進步,特別是2000年後,數據庫不在僅僅是存儲和管理數據了,而轉變成用戶所須要的各類數據管理的方式,數據庫有不少種類和功能,從最簡單的存儲有各類數據的表格到可以進行海量數據存儲的大型數據庫系統都在各個方面獲得了普遍的應用。redis
按照早起的數據庫理論,比較流行的數據庫模型有三種,分別爲層次式數據庫,網絡式數據庫和關係型數據庫,而在當今的互聯網中,最多見的數據庫模型主要是兩種,即關係型數據庫和非關係型數據庫。sql
(1)關係型數據庫的由來mongodb
雖然網狀數據庫和層次數據庫已經很好的解決了數據的集中和共享問題,可是在數據獨立性和抽象級別上仍有很大欠缺,用戶在對這兩種數據庫進行存取時,仍然須要明確數據庫的存儲結構,支出存取路徑,而關係型數據庫就能夠很好的解決這些問題數據庫
(2)關係型數據庫介紹vim
關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係(既二維格式表)。例如宏福教育某一期的學生關係就是一個二元關係,在關係型數據庫中,對數據的操做幾乎所有創建在一個或多個關係表上,經過對這些關聯表格分類,合併,鏈接或選取等運算來實現數據的管理。centos
關係型數據庫誕生距今已經有40多年了,從理論產生髮展到現實產品,例如:你們最多見的mysql和oracle數據庫,oracle在數據庫領域裏上升到了霸主的地位,造成每一年高達數百億美圓的龐大產業市場,而mysql也是不容忽視的數據庫,以致於被oracle中心收購了。
(3)表之間有關係
數列
數據
非關係型數據庫也稱之爲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,redis
關係型數據庫:oracle,db2,sqlserver,mysql,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,都沒有及時加入到發佈版本之中。
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是一門特殊的語言,專門用來操做關係型數據庫
不區分大小寫
表是結構化的文件,用來存儲特定類型的數據,表可能存儲客戶清單,產品目錄,或者其餘信息列表。
存儲在表中的數據是一種類型的數據或一個列表,絕對不該該將顧客的列表信息和訂單的列表信息存儲到同一個數據庫表中,這樣作會使隨後的數據檢索和訪問變得困難,代替的解決方案是建立兩個表,在每一個表中存儲其相應的列表信息。數據庫中每一個表都有一個名字來標識它,而且在一個數據庫中表名是惟一的
列( Column): 表中的一個字段,表由一列或多列構成,列中存儲表的一部分信息
每一列存儲一條特定信息。例如在客戶表中,一列存儲客戶編號,另外一列存儲客戶姓名,
而地址,城 市,州,郵政編碼存儲在各自的列中。數據庫中每一列都有相應的數據類型,
數據類型定義了該列能夠存儲哪一種類型的數據。例如,若是某列要存儲數字,就應該使用numeric數據類型。
若是某列存儲日期,文本,提示,金額等 就須要用恰當的數據類型來指定。
表中的數據存儲在行裏,把表當作相似電子表格的網格,在網格中垂直的列就是表的列 ,水平的行就是表的行。
例如,客戶表可能在每一行存儲一個客戶,表中行的數量也就是表中記錄的條數。
注: NULL 在SQL中NULL用來指代空值( no value),若是一列被定義爲容許爲NULL,
當插入或者更新行時,能夠忽略該列的數據。
新建一個mariadb的yum源
[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 install MariaDB -y #區分大小寫
[root@localhost ~]# mysql_secure_installation #初始化數據庫
接下來的全部都輸入y
忘記mysql的root密碼:
vim /etc/my.cnf.d/server.cnf
重啓
mysql -u root 便可免密登錄
修改密碼:
MariaDB [(none)]> use mysql;
MariaDB [mysql]> select host,user,password from user;
MariaDB [mysql]> update user set password=password('456') where user='user';
此時用戶user的密碼就修改爲了456
將mariadb的配置文件中的skip-grant-tables註釋掉,重啓數據庫,密碼就生效了。
mysql -uroot -p123456 #-u接數據庫用戶名 -p接數據庫的密碼
show databases; #查看數據庫
mysqladmin --version; #查看數據庫版本
show create database mysql; #查看建立數據庫狀態
use db_name; #使用db_name數據庫
show tables; #查看該數據庫的全部表
這裏除了能夠修改user中的數據,其餘的都不可更改!
select * from user; #查看user表中的全部數據
查看當前數據庫有哪些用戶:select host,user,password from user; #查看user表中的host,user,password字段,中間以,分隔,
localhost:只容許本地登陸,也就是說只能從linux端訪問數據庫,不容許第三方登錄。
show create database 1db; #查看建立數據庫狀態
select user(); #查看當前用戶
當前用戶爲root
建立用戶
grant all privileges on test03.grade to 'user1'@'%' identified by 'user1'; #建立用戶user1且密碼爲user1,賦予test03數據庫的grade表最高權限(在任意主機上%) *.*表示全部數據庫的全部表 %表明任意主機 identified by表示設置密碼爲user1,此命令也可作修改用戶名密碼使用。
添加用戶user1成功
grant all privileges on test03.grade to 'root'@'%';#給root賦予test03數據庫的grade表最高權限(在任意主機上%) *.*表示全部數據庫的全部表 %表明任意主機
grant select,create,update,delete on test03.grade to 'aaa'@'%'; #給aaa添加查詢,建立,更新,刪除的權限(在任意主機上)
show grants for 'aaa'; #查看aaa用戶的權限(root用戶)
revoke all on *.* from 'aaa'@'%'; #收回aaa在任意數據庫的任意表的最高權限
show grants; #查看權限
create database test3 #建立數據庫test3
drop database test3 #刪除數據庫test3
create database 1db character set utf8; #修改1db數據庫默認字符集爲中文(utf8)
alter database 1db character set utf8;