表與表之間的引用,即為外鍵
范式:第一范式,第二范式,第三范式
關(guān)系運算
選擇:挑選符合的行
投影:挑選符合的列表與表之間的連接,外鏈接、內(nèi)連接
數(shù)據(jù)庫是由表組成的,索引是表中的某個字段或特定數(shù)據(jù),B+樹等,索引會影響寫入操作
視圖:虛表,即select后的結(jié)果
-
SQL:結(jié)構(gòu)化查詢語言,
- DDL:數(shù)據(jù)定義語言,操作表,索引等
- DML:數(shù)據(jù)操作語言,操作表中的數(shù)據(jù)
-
也提供了編程接口:代碼片段
- 存儲過程:沒有返回值的函數(shù),對數(shù)據(jù)的加工,
- 存儲函數(shù):有返回結(jié)果的代碼片段,funciton,有輸入、輸出
- 觸發(fā)器:一類sql語句,或一段代碼,如插入語句執(zhí)行時,會觸發(fā)原
有的插入程序。
表連接:join,為了滿足關(guān)系范式,拆表之后再合表去查詢數(shù)據(jù),會消耗內(nèi)存
-
RDBMS:
- MySql:MySql、MariaDB,Percona-server
- PostgreSQL:即pgsql,商業(yè)版為EnterpriseDB
- Oracle:
- MSSQL:微軟的數(shù)據(jù)庫,只能運行在windows上
獨占鎖和共享鎖:寫的過程不能讀,讀的時候可以都讀
事務(wù):ACID:原子性、一致性、隔離性、持久性
事務(wù)日志和數(shù)據(jù)日志,在放寫入事務(wù)日志而沒來得及寫入數(shù)據(jù)日志時,出現(xiàn)問題。則恢復管理器從事務(wù)日志中恢復寫入數(shù)據(jù)日志中
-
SQL:Structure Qurey Language結(jié)構(gòu)化查詢語言
- 數(shù)據(jù)存取協(xié)議:mysql協(xié)議、oracle協(xié)議都屬于應用層協(xié)議。
- server端監(jiān)聽在套接字,接收請求
- client端:程序接口(CLI和GUI)、應用編程接口(ODBC:Open Database Connection開放數(shù)據(jù)庫系統(tǒng)互聯(lián))
* (1)現(xiàn)成的程序:如php-mysql客戶端程序- (2)通過自己編寫代碼實現(xiàn)交互
-
基礎(chǔ)概念:
- 1、約束:constraint,輸入的數(shù)據(jù)符合一定的規(guī)范,向數(shù)據(jù)表提供的數(shù)據(jù)要遵守的限制
主鍵(也是一種約束):只能有1個,一個或多個字段組合,能唯一標識本行,并且不能為空,not null
唯一鍵:可以有多個,與主鍵描述一致,只是允許為空,null
外鍵:一個表中的某字段填入的數(shù)據(jù),取決于另一個表的主鍵已有的數(shù)據(jù)
- 1、約束:constraint,輸入的數(shù)據(jù)符合一定的規(guī)范,向數(shù)據(jù)表提供的數(shù)據(jù)要遵守的限制
2、索引:將1個或幾個字段數(shù)據(jù)抽取出來,并按照特定順序排序存儲
稠密索引:
稀疏索引:3、關(guān)系運算 :選擇(挑選部分行)、投影(挑選需要的字段,挑選列)、連接(笛卡爾乘積、左聯(lián)接、右聯(lián)結(jié))
4、數(shù)據(jù)抽象:
物理層:決定數(shù)據(jù)的存儲格式,在磁盤上如何組織文件,一張表存儲于多個文件or多張表存儲于一個文件
邏輯層:描述DB存儲什么數(shù)據(jù),以及數(shù)據(jù)間存在什么樣的關(guān)系。100張表,某個用戶只能查看20張表5、關(guān)系模型的分類:
關(guān)系模型
實體-關(guān)系模型
基于對象的關(guān)系模型
半結(jié)構(gòu)化的關(guān)系模型:以XML格式存儲數(shù)據(jù)6、安裝MySQL:
源代碼:編譯安裝:
二進制格式的程序包:展開至特定路徑,簡單配置后即可使用
程序包管理的程序包:
rpm
deb7、 MariaDB:存儲引擎也稱之為“表類型”
支持更多的存儲引擎:MyISAM的升級版----->Aria、InnoDB升級版--->XtraDB-
8、centos7:直接提供MariaDB
centos6: 自行安裝
rpm -e 包名 卸載包
9、MySQL配置文件查找次序:
/etc/my.cnf--->/etc/mysql/my.cnf----> --default-extra-file=/PATH/TO/CONF_FILE---> ~/.my.cnf/
10、在mysql的bin目錄下,是mysql的執(zhí)行程序,其中的mysqld_multi是mysql的多實例程序,類似于虛擬主機的概念,通過不同的端口啟用多個mysql進程
11、MariaDB的程序組成:
Client:
mysql:cli交互式客戶端程序
mysqldump,mysqladmin
Server:
mysqld_safe
mysqld
mysqld_multi
12、服務(wù)器監(jiān)聽的兩種socket:
ip socket:監(jiān)聽在tcp的3306端口,支持遠程通信
unix sock:監(jiān)聽在sock文件(/tmp/mysql.sock,/var/lib/mysql/mysql.sock),僅支持本地通信,server地址只能為localhost或127.0.0.113、mysql:
-uUSERNAME:用戶名,默認為root
-hHOST:服務(wù)器主機,默認為localhost
-pPASSWORD:用戶的密碼,默認為空密碼
用戶賬號由兩部分組成:‘USERNAME'@'HOST';其中HOST用于限制此用戶可通過哪些主機遠程連接mysql服務(wù)
支持使用通配符:
%:匹配任意長度的任意字符
_:匹配任意單個字符
安全初始化:執(zhí)行/usr/local/mysql/bin/mysql_secure_installation命令:
客戶端命令:本地執(zhí)行,如在mysql下執(zhí)行help,查看status
服務(wù)端命令:通過mysql協(xié)議發(fā)往服務(wù)器執(zhí)行并取回結(jié)果,每個命令都必須有命令結(jié)束符號,默認為分號;-
14、關(guān)系型數(shù)據(jù)庫的常見組件:
數(shù)據(jù)庫:database,由多張表組成的數(shù)據(jù)集合
表:table,包含行和列
索引:index
視圖:view虛擬出的多個表
用戶:user
權(quán)限:privilege用戶對數(shù)據(jù)庫、表的訪問權(quán)限被調(diào)用代碼:
存儲過程:procedure,調(diào)用一下,執(zhí)行,使用call,沒有返回值
存儲函數(shù):function,使用select,有返回值
觸發(fā)器:trigger,觸發(fā)已經(jīng)寫好的代碼片段,觸發(fā)額外代碼,如誰查了表等代碼
事件調(diào)度器:event scheduler 15、SQL語句
DDL:數(shù)據(jù)定義語言
create、drop、alter
DML:數(shù)據(jù)操縱語言
insert、delete、update、select
grant、revoke
使用:
(1)創(chuàng)建數(shù)據(jù)庫:create database|schema 'DB_NAME';
幫助命令:myslq>help create database
字符集和排序規(guī)則
(2)刪除數(shù)據(jù)庫:drop database|schema 'DB_NAME';