數據庫
數據庫是數據的匯集,它以一定的形式存儲在存儲介質上
數據庫的發展史
- 萌芽階段:文件系統,使用磁盤文件來存儲數據
- 初級階段:第一代數據庫,出現了網狀模型、層次模型的數據庫
- 中級階段:第二代數據庫,關系型數據庫和結構化查詢語言
- 高級階段:新一代數據庫,“關系-對象”型數據庫
數據庫管理系統和文件管理系統
- 文件管理系統的缺點是:
- 編寫應用程序不方便
- 數據冗余不可避免
- 應用程序依賴性
- 不支持對文件的并發訪問
- 數據間練習弱
- 難以按照用戶視圖表示數據
- 無安全控制功能
- 數據庫管理系統(DBMS)的優點
- 相互關聯的數據的集合
- 較少的數據冗余
- 程序與數據相互獨立
- 保證數據的安全、可靠
- 最大限度地保證數據的正確性
- 數據可以并發使用并能同時保證一致性
DBMS是管理數據庫的軟件,它實現數據庫系統的各種功能,是數據庫的核心。他的基本功能包括數據定義、數據處理、數據安全、數據備份。 數據庫管理員(DBA)負責數據庫的規劃、設計、協調、維護和管理工作,應用程序指以數據庫為基礎的應用程序。
- 數據庫的架構
- 單機架構:部署在一個計算機上的數據庫系
- 大型主機/終端架構:
- 客戶/服務器式架構:是在客戶/服務器計算機網絡上運行的DBS,是將存儲、修改和運行功能放在服務器上,而查詢放在客戶端上的結構
- 分布式架構:將分散存儲在計算機網絡中的多個節點上的數據庫在邏輯上統一管理
- 關系型數據庫
- 關系:關系就是二維表,表中的行(row)、列(column)次序并不重要。
- 行:表中的每一行也稱為一條記錄
- 列:表中每一列稱為屬性或者字段
- 主鍵(Primary Key):用于唯一確定一個記錄的字段
- 域domain:屬性的取值范圍,如,性別只能是‘男’和‘女’兩個值
- 對象關系型數據庫(ORDBMS)
- MySQL:MySQL(現為Oracle公司的產品),MariaDB,Percona server
- PostgreSQL:簡稱pgsql,EnterpriseDB
- Oracle:
- MSSQL:微軟的數據庫管理系統軟件
- 事物transaction:多個操作被當做一個整體對待,事物的特性ACID:原子性、一致性、隔離性、持久性。
- 實體-聯系模型
- 實體Entity:客觀存在并且可以相互區分的客觀事物或抽象事件稱為實體,在E-R圖中用矩形表示實體
- 屬性:實例所具有的特征或性質
- 聯系:是數據之間的關聯集合,是客觀存在的應用語義鏈。聯系分為實體間的聯系和實體內部的聯系。實體內部的聯系指組成實體的個屬性之間的聯系。實體之間的聯系是指不同實體之間的聯系。實體之間的聯系用菱形表示。
- 聯系類型有一對一聯系,一對多聯系,多對多聯系
- 數據三要素
- 數據結構包含兩類,一是與數據類型、內容、性質有關的對象,另一類是與數據之間聯系有關的對象,他從數據組織層表達數據記錄與字段的結構
- 數據的操作:數據提取是在數據集合中提取感興趣的內容;數據更新是指變更數據庫中的數據
- 數據的約束條件:是一組完整性規則的集合,包括實體完整性(Entity integrity)、與完整性(Domain integrity)和參考完整性(Referential integrity)。
- 簡易數據規劃流程
- 第一階段收集數據,得到字段。收集必要且完整的數據項,轉換成數據表的字段
- 第二階段把字段分類,歸入表,建立標的關聯。分割數據表并建立關聯的優點,節省空間,減少輸入錯誤,方便數據修改
- 第三階段規范化數據庫
數據庫的正規化分析
- 關系型數據庫管理系統設計范式基礎概念 設計關系數據庫時,遵從不同的規范要求,設計出合理的關系型數據庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞歸次規范,越高的范式數據庫冗余越小。
- 關系型數據庫的六種范式
- 第一范式:1NF,無重復的列,每一列都是不可分割的基本數據項,同一列中不能有多個值,即試題中的某個屬性不能有多個值或者不能有重復的屬性。第一范式是對關系模式的基本要求。
- 第二范式:2NF,屬性完全依賴于主鍵,第二范式必須先滿足第一范式,要求表中的每個行必須可以被唯一地區分。通常要為表加上一個列,以存儲各個實例的唯一標示PK,非PK終端需要與整個PK有直接相關性
- 第三范式:3NF,屬性不依賴與其它非主屬性,滿足第三范式必須滿足第二范式。第三范式要求一個表中不包含其他表中已包含的非主關鍵字信息,非PK字段間不能有從屬關系。
- 巴德斯科范式:BCNF(BOyce-Codd Normal Form),是第三范式的一個子集,滿足BCNF必須滿足第三范式。滿足BCNF必須滿足所有非主屬性對每一個碼都是完全函數依賴,所有主屬性對每一個不包含他的碼也是完全函數依賴,沒有任何屬性完全依賴于非碼的任何一組屬性
- 第四范式
- 第五范式又叫完美范式
結構化查詢語言SQL
- SQL:Structure Query Language;sql解釋器;數據存儲協議:應用層洗衣,C/S
- S:server,監聽于套接字,接受并處理客戶端的應用請求
- C:client程序接口,命令行界面(cli)和圖形用戶界面(GUI);應用編程借口,開放數據庫連接(ODBC)和Java數據庫連接(JDBC)
約束
約束Constraint,表中的數據要遵守的限制
- 主鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行;必須提供數據,即NOT NULL,一個表中只能有一個
- 唯一鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標示本行;允許為NULL,一個表中可以存在多個
- 外鍵:一個表中的某字段可以跳入的數據取決于另一個標的主鍵或唯一鍵已有的數據
- 檢查:字段值在一段范圍內
索引
將表中的一個或多個字段中的數據復制一份另存,并且此些需要按特定次序排序存儲 關系運算:選擇,挑選出符合條件的行;投影,挑出需要的字段;連接,標間字段的關聯
數據模型
- 數據抽象
- 物理層:決定數據的存儲格式
- 邏輯層:描述存儲什么數據和數據間存在的關系
- 視圖層:描述DB中的部分數據
- 關系模型的分類
- 關系模型
- 給予對象的關系模型
- 半結構化的關系模型:XML數據
MySQL
1985年,Michael Widenius創建了TCX公司 1996年,Michael Widenius發布了第一版mysql數據庫 2008年,mysql被賣給了sun公司 2009年,Orcale公司收購了sun公司,同一年Michael Widenius退出sun公司創立了mariaDB
MySQL和MariaDB
- 安裝
- 下載源代碼編譯安裝
- 二進包制安裝:二進制格式程序包展開到特定路徑,并經過簡單配置后可以使用
- 使用rpm包管理程序,從系統鏡像中自帶的rpm包安裝
- 安裝和使用MariaDB:Centos7直接提供yum源;可以根據官方的頁面https://downloads.mariaddb.org/mariadb/repositories/增加yum倉庫,然后下載。
- MariaDB的特性
- 單進程,多線程
- 插件式存儲引擎:存儲管理器有多種實現版本,功能和特性可能略有差別;用戶可根據需要靈活選擇
- 存儲引擎稱之為”表類型”
- 和mysql的對比
- 更多的存儲引擎 MySQL ==> MariaDB MyISAM ==> Aria InnnoDB ==> XtraDB Mysql5.5.8開始InnoDB引擎是mysql的默認引擎,InnoDB對比MyISAM的最大特點就是它支持事物
- 諸多擴展和新特性
- 提供了較多測試組件
- 開源
CentOS 7的MariaDB數據庫包括兩個包組:MariaDB和MariaDB-client
- mariadb組包括下面的包:
- mariadb-server
- mariadb-bench
- mariadb-test -mariadb-client包括下面包:
- mariadb
- mysql-python
- mysql-connector-odbc
- libdbi-dbd-mysql
- mysql-connector-java
- perl-DBD-MySQL
- 配置文件:/etc/my.cnf和/etc/my.cnf.d/*.cnf
- 命令
- yum groupinstall mariadb mariadb-client //安裝mariadb和mariadb命令行客戶端
- systemctl start mariadb 啟動數據庫服務
- systemctl enable mariadb 設置數據庫服務開機啟動
- firewall-cmd –permament –add-service=mysql 允許訪問3306端口
- firewall-cmd –reload 重新加載firewall配置文件,或者重啟firewall服務也可以
- 提高安全性:安裝完成后執行mysql_secure_installation腳本
- 設置數據庫管理員root登錄口令
- 禁止root遠程登錄
- 刪除anonymous(匿名)賬戶
- 刪除test數據庫
- 配置
- 在配置文件mysqld項下面添加skip-networking=1,表示關閉網絡連接,只偵聽本地客戶端
- socket的配置在/var/lib/msyql/mysql.socket文件中保存,默認沒有配置。也可以在/etc/my.cnf中修改保存路徑。
客戶端工具
- 命令行交互式客戶端程序mysql
- -uUSERNAME:用戶名
- -hHOST:服務器主機;默認為localhost
- -pPASSWORD:用戶的密碼,建議使用-p直接回車,可以隱藏密碼,默認為空
- mysql賬戶分為兩部分:’USERNAME’@”HOST’
- HOST用于限制此用戶可通過那些遠程主機連接mysql服務,支持使用通配符:‘%’匹配任意長度的任意字符,‘_’匹配任意單個字符。
- 運行mysql命令:默認空密碼登錄
- MariaDB [(none)]> use mysql; 切換到mysql數據庫
- MariaDB [mysql]> select user(); 查看當前登錄用戶
- MariaDB [mysql]> select User,Host,Password from user; 查詢該數據庫有多少用戶及其主機和加密后的密碼
- 客戶端命令可以通過help查看,每個命令都有完整形式和簡寫格式
- 服務器端命令:通過MySQL協議發往服務器執行并取回結果,每個命令都必須使用命令結束符,默認是分號。
服務器參數
服務器端的工作特性定義方式分別是命令行選項和配置文件參數
- 獲取可用參數列表可用命令“mysqld –help –verbose”
- 獲取運行中的mysql進程使用各服務器參數和值
- show global variables;
- show [session] variables;
- 注意:其中有些參數支持運行時修改會立即生效;有些不支持,只能通過修改配置文件重啟服務區生效;有些參數作用域是全局的,且不可改變;有些可以為每個用戶提供單獨的設置。
- 修改服務器變量的值 “MariaDB [(none)]> help set;”
- 修改全局變量
- MariaDB [(none)]> set global system_var_name=value;
- MariaDB [(none)]> set @@global.system_var_name=value;
- 狀態變量用于保存mysqld運行中的統計數據的變量,不可更改
- MariaDB [(none)]> show global status;
- MariaDB [(none)]> show status;
關系型數據庫的常見組件
- 數據庫database
- 表table:
- 行row
- 列column
- 索引index
- 視圖view
- 用戶user
- 權限privilege
- 存儲過程procedure,無返回值
- 存儲函數function,有返回值
- 觸發器trigger
- 時間調度群event scheduler,任務計劃
SQL語句構成
keyword組成clause,多條clause組成語句
- 這是一組語句,有select、from、where三個字句構成,這三個詞是keyword
- select *
- from products
- where price>400
- SQL語句:
- DDL數據定義語句 create、drop、alter
- DML數據操作語句 insert、delete、update
- DCL權限控制語句 grant、remove
- DQL數據查詢語句 select
- SQL語言規范
- 在DMS中,sql語句不區分大小寫,單字符常量區分大小寫
- sql語句可單行或多行書寫,以分號結尾;關鍵詞不能跨多行或者簡寫
- 用空格和縮進來提高語句的可讀性
- 子句通常位于獨立行,便于編輯,提高可讀性
- 注釋:sql標準‘/*注釋內容*/’代表多行注釋,‘– 注釋內容’單行注釋,有空格;mysql注釋使用‘#’
數據庫操作
- 數據庫對象的命名規則:必須以字母開頭,可包括數字和三個特殊字符(#_$),不能使用mysql保留字,同意數據庫下的對象不能同名
- 數據庫的創建
create database|schema [if not exists] 'DB_NAME';
character set 'character set name'
collate 'collate name'
- 刪除數據庫
drop database|schema [if exists] 'DB_NAME';
- 查看支持所有字符集:show character set;
- 查看所有排序規則:show collation;
- 獲取命令幫助:help keyword;
- 查看數據庫列表:show databases;
表操作
- 創建表
- create table [if not exists] 'tbl_name' (col1 type1修飾符,col2 type2 修飾符,...)
- 字段信息
- col type1
- primary key(col1,...)
- index(col1,...)
- unique key(col1,...)
- 表選項
- engine [=] engine_name
show engines;查看支持的引擎類型
- row_format [=] {default|dynamic|fixed|compressed|redundant|compact}
- 獲取幫助
help create table;
- 表操作
- 查看所有的引擎:show engine;
- 查看表:show tables [from db_name];
- 查看表結構:desc [db_name.]tb_name;
- 刪除表:drop table [if exists] tb_name;
- 查看表創建命令:show create table tbl_name;
- 查看表狀態:show table status like ‘tbl_name’\G;
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89510