2019年軟件研究院新員工數據庫開發基礎培訓課件.pdf
下載文檔
上傳人:地**
編號:1268110
2024-12-16
89頁
2.32MB
該文檔所屬資源包:
大數據互聯網軟件研究院新員工規章制度信息安全5G基礎知識培訓課件資料
1、 CHINAUNICOM數據庫開發基礎培訓2019年07月About Me項目管理部項目管理部 劉光華劉光華Email:tel:18653176958Oracle Certified Database Administrator Professional 8i (2002.10)Oracle Certified Database Administrator Professional 10g (2008.12)20 years experience with Oracle Develop&DBA technology 10 years experience with MySQL DBA tech2、nology 培訓目標了解數據庫的基本概念了解數據庫的基本概念了解了解MySQL數據庫體系結構數據庫體系結構了解數據庫開發的基礎概念了解數據庫開發的基礎概念培訓內容一、數據庫基本概念一、數據庫基本概念二、二、MySQL數據庫基本概念數據庫基本概念三、阿里云數據庫三、阿里云數據庫RDS簡介簡介四、四、MySQL數據庫基礎操作數據庫基礎操作五、五、MySQL數據庫應用開發基礎數據庫應用開發基礎數據庫數據庫基本概念基本概念 數據數據(Data)(Data)數據庫數據庫(Database)(Database)數據庫管理系統數據庫管理系統(DBMS)(DBMS)數據庫系統數據庫系統(DBS)(DBS)數3、據數據 數據數據(Data)的定義:的定義:對客觀事物的符號表示,對客觀事物的符號表示,如圖形符號、數字、字母等,數據是數據庫中存儲的基本對象。在日常生活中,人們直接用語言來描述事物;在計算機中,為了存儲和處理這些事物,就要將事物的特征抽象出來組成一個記錄來描述。數據的種類文字、圖形、圖象、聲音 數據的特點數據與其語義是不可分的數據舉例 學生檔案中的學生記錄(張華,男,1984,上海,計算機系,2003)數據的形式不能完全表達其內容 數據的解釋語義:學生姓名、性別、出生年月、籍貫、所在系別、入學時間解釋:張華是個大學生,1984年出生,上海人,2003年考入計算機系數據庫數據庫 數據庫數據庫(4、Database,簡稱DB)的定義的定義:“按照數據結構來組織、存儲和管理數據的倉庫”J.Martin給數據庫下了一個比較完整的定義:數據庫是存儲在一起的相關數據的集合,這些數據是結構化的,無有害的或不必要的冗余,并為多種應用服務數據庫發展簡史1951:Univac系統使用磁帶和穿孔卡片作為數據存儲。1970:E.F.Codd提出了關系數據庫模型。1974年:IBM的Ray Boyce和Don Chamberlin將Codd關系數據庫的12條準則的數學定義以簡單的關鍵字語法表現出來,里程碑式地提出了SQL(Structured Query Language)語言。1979:Oracle公司引入5、了第一個商用SQL關系數據庫管理系統。1983:IBM 推出了DB2數據庫產品。數據庫管理系統 數據庫管理系統數據庫管理系統(Database Management System)是一種操縱和管理數據庫的大型軟件,是用于建立、使用和維護數據庫,簡稱DBMS。關系型數據庫管理系統稱為RDBMS,R指RelationRelation DBMS的作用 它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。DBMS的主要功能For 開發人員數據定義功能:提供數據定義語言(DDL)定義數據庫中的數據對象數據操縱功能:提供數據操縱語言(DML)操縱數據實現對數據庫的基本操作(查詢、插入、刪除和修改6、)DBMS的主要功能For數據庫管理員數據庫的運行管理保證數據的安全性、完整性、多用戶對數據的并發使用發生故障后的系統恢復數據庫的建立和維護功能(實用程序)數據庫數據批量裝載數據庫轉儲介質故障恢復數據庫的重組織性能監視等常見的RDBMS Oracle DB2 Sybase MS SQL Server MySQL PostGreSQL 曾經流行的DBMS Ingres Informix Rdb/vms Xbase:dBase Foxbase Foxpro 數據庫系統 數據庫系統(Database System,簡稱DBS)是一個實際可運行的存儲、維護和應用系統提供數據的軟件系統 數據庫系統構成 7、DBMS DB 應用軟件 數據庫管理員 用戶15數據庫系統的使用數據庫服務器響應和提供數據應用程序數據庫數據庫操作和查詢16數據庫系統的使用培訓內容一、數據庫基本概念一、數據庫基本概念二、二、MySQL數據庫基本概念數據庫基本概念三、阿里三、阿里RDS簡介簡介四、四、MySQL數據庫安裝配置數據庫安裝配置五、五、MySQL數據庫應用開發基礎數據庫應用開發基礎Whats MySQL?什么是MySQL是一個開源數據庫管理系統,開發者為瑞典MySQL AB公司。體積小、速度快、總體擁有成本低開始廣泛地應用在Internet上的中小型網站中目前廣泛應用于企業級應用最新版本8.0,常用版本5.7、5.68、MySQL數據庫歷史 發展歷程2001 2007 開源飛速發展期 MySQL AB2008.01 2009.04 SUN10億美金收購MySQL SUN MySQL2009.04 now Oracle以74億美金收購SUN Oracle MySQLMySQL企業級環境應用MySQL企業級環境應用MySQLOracle/DB2/Microsoft SQL Server服務器類型PC機小型機服務器數量多相對較少服務器管理分布式集中式應用類型OLTPOLTP&OLAP行業互聯網傳統行業MySQL企業級環境應用 總結MySQL已然成為互聯網公司“標配”數據庫Facebook、Google、Twitte9、r淘寶去IOE,Oracle=MySQLeBay去IOE,Oracle=MySQL傳統行業正在逐步將一些應用遷移到MySQLMySQL數據庫體系結構 單進程多線程Like Microsoft SQL ServerOracle多進程架構(except Windows)插件式存儲引擎架構 多數據庫Oracle 單數據庫多用戶Microsoft SQL Server 多數據庫DB2 多數據庫MySQL數據庫體系結構MySQL數據庫體系結構 主要文件配置文件(config file)錯誤文件(error file)慢查詢日志(slow log)二進制日志(binlog)MySQL數據庫體系結構 配置文10、件/etc/f-defaults-file mysql help|grep fMySQL數據庫體系結構 配置文件/etc/fmysqldskip-slave-startlog_slave_updates =1read_only =1server-id =998bind-address =172.17.1.4port =4331pid-file =/home/ddb/mysql/db-55-1/mysqld.pidsocket =/home/ddb/mysql/db-55-1/mysqld.sockbasedir =/usr/local/mysql/datadir =/home/ddb/mysq11、l/db-55-1innodb_data_home_dir =/home/ddb/mysql/db-55-1innodb_log_group_home_dir =/home/ddb/mysql/db-55-1tmpdir =/home/ddb/mysql/db-55-1log-error =/home/ddb/mysql/db-55-1/mysqld.loglog_slow_queries =/home/ddb/mysql/db-55-1/mysql-slow.loglog_bin =/home/ddb/mysql/db-55-1/mysql-bin.loguser =mysqllanguag12、e =/usr/local/mysql/shareMySQL數據庫體系結構 錯誤文件Like Oracle alert.log故障診斷性能調優 死鎖信息 latch信息MySQL數據庫體系結構 慢查詢日志記錄運行超過某個時間閾值的SQL slow_query_log=0|1MySQL 5.1開始以毫秒為單位 long_query_timeMySQL 5.5開始可以存表log_output=FILE|TABLE|NONE-log_output=FILE,TABLEMySQL數據庫體系結構 二進制日志邏輯日志 NOT LIKE Oralce redo logmysqlbinlog可以進行解析rep13、lication基于二進制日志可用于point-in-time的恢復安全與審計MySQL數據庫體系結構MySQL數據庫體系結構 數據文件組織存儲引擎介紹 存儲引擎分類 InnoDB MyIAM Archive Merge Fedorated Infobright Spider存儲引擎介紹 InnoDBMySQL OLTP第一存儲引擎 Facebook、Twitter、Google、163、taobaoMySQL 5.5開始成為默認的存儲引擎Oracle僅支持InnoDB存儲引擎的后續持續開發存儲引擎介紹InnoDB 事務支持,Fully ACID 行級鎖 Row-level locking 多14、版本并發控制 Multi-version concurrency control(MVCC)外鍵支持 Foreign key support 自動死鎖檢測 Automatic deadlock detection 高性能、高擴展、高可用 High performance,high scalability,high availabilityInnoDB physical storage 頁(page)最小IO單位 區(extent)空間管理單位 段(segment)對象 表空間數據和索引合并存儲一個文件,.ibd,每個表單獨存儲/ibdata,表定義文件.frm存儲引擎介紹 MyISAMMySQ15、L 5.5之前默認的存儲引擎不支持事務表鎖設計 多讀單寫數據丟失風險高Oracle MySQL后續不再對其進行開發多核性能表現較差數據和索引單獨存儲.myi .myd,.frm 存儲引擎介紹 AriaMyISAM后續版本由MariaDB進行維護與開發兼容原MyISAM文件支持事務與非事務選項支持提供更好的性能存儲引擎介紹 Archive主要用于歸檔數據的保存使用zlib無損壓縮算法僅支持SELECT與INSERT兩種操作Oracle不再提供后續開發支持存儲引擎介紹 Fedorated Like Oracle Transparent Gateway 僅支持連接MySQL數據庫-federated16、 Oracle不再提供后續開發支持存儲引擎介紹 Infobright 第三方存儲引擎 非開源 面向列的存儲方式 OLAP 騰訊、華為 培訓內容一、數據庫基本概念一、數據庫基本概念二、二、MySQL數據庫基本概念數據庫基本概念三、阿里三、阿里RDS簡介簡介四、四、MySQL數據庫安裝配置數據庫安裝配置五、五、MySQL數據庫應用開發基礎數據庫應用開發基礎43RDS 基本概念RDS(Relational Database Service)是一種穩定可靠、可彈性伸縮的在線數據庫服務基于阿里云分布式文件系統和SSD盤高性能存儲支持MySQL、SQL Server、PostgreSQL、PPAS和Mar17、iaDB引擎提供了容災、備份、恢復、監控、遷移等方面的全套解決方案天宮平臺RDS 采用MySQL 5.6 引擎44RDS 基本概念45RDS基本概念46RDS 基本概念培訓內容一、數據庫基本概念一、數據庫基本概念二、二、MySQL數據庫基本概念數據庫基本概念三、阿里三、阿里RDS簡介簡介四、四、MySQL數據庫基本操作數據庫基本操作五、五、MySQL數據庫應用開發基礎數據庫應用開發基礎MySQL安裝配置 下載地址:https:/ windowsfor linux MySQL客戶端常用圖形客戶端工具:SQLyognavicat(可網上下載)命令行方式:mysql-helpMySQL安裝配置MyS18、QL基本操作 mysql、mysqladmin和mysqldump MySQL管理工具和用戶操作界面mysql命令 mysql命令mysql-h host_name-u user_name ppasswordh:當連接MySQL服務器不在同臺主機時,填寫主機名或IP地址u:登錄MySQL的用戶名p:登錄MySQL的密碼 注意:密碼如果寫在命令行的時候一定不能有空格。如果使用的系統為linux并且登陸用戶名字與MySQL的用戶名相同即可不用輸入用戶名密碼,linux默認是以root登陸,windows默認用戶是ODBCMySQL常用命令 選定默認數據庫:use dbname;顯示所有數據庫:sh19、ow databases;顯示默認數據庫中所有表:show tables;放棄正在輸入的命令:c 顯示命令清單:h 退出mysql程序:q 查看MySQL服務器狀態信息:sMySQL常用命令 創建數據庫:create database dbname;創建用戶:-CREATE USER user1localhost IDENTIFIED BY pass1;-GRANT SELECT,INSERT,UPDATE,DELETE ON*.*TO user1localhost;-GRANT ALL ON*.*TO user1localhost;或者 一個語句完成創建用戶、授權GRANT ALL ON*.20、*TO user1localhost IDENTIFIED BY pass1;GRANT ALL ON*.*TO user210.0.23.121 IDENTIFIED BY pass2;GRANT ALL ON*.*TO user3*IDENTIFIED BY pass3;創建表create table t(a int)engine=innodb;修改表存儲引擎 alter table t engine=myisam處理SQL文件 mysql命令執行存放在文件里的SQL命令格式:mysql option dbname file.sqlmysql u root p dbname bak.sql21、mysqldump u root p tmpdb backuptmp.sql備份出來的是一個文本文件培訓內容一、數據庫基本概念一、數據庫基本概念二、二、MySQL數據庫基本概念數據庫基本概念三、阿里云數據庫三、阿里云數據庫RDS簡介簡介四、四、MySQL數據庫基本操作數據庫基本操作五、五、MySQL數據庫應用開發基礎數據庫應用開發基礎數據庫開發基礎事務與并發控制事務與并發控制索引設計與使用索引設計與使用SQL開發的基本原則開發的基本原則事務(Transaction)事務是數據庫區別于文件系統的特征之一事務是數據庫區別于文件系統的特征之一ACID特性特性原子性:事務不可拆分,要么都發生,要么都不22、發生一致性:事務將數據庫從一種一致狀態轉變為下一種一致狀態隔離性:事務未提交前對其他事務不可見持久性:事務提交后,結果是永久保存的事務與并發控制事務與并發控制并發訪問有可能發生的三種現象并發訪問有可能發生的三種現象臟讀(dirty read):讀到別人未提交的數劇不可重復讀(nonrepeatable read):已經讀到的數據被刪除或被修改,無法再次讀取到幻象讀(phantom read):由于別人插入新記錄導致再次讀到的數據多于以前讀到的數據事務與并發控制事務與并發控制并發事務隔離級別(并發事務隔離級別(ANSI)隔離度越高,系統并發性越差隔離度越高,系統并發性越差MySQL 默認隔離度為23、默認隔離度為REPEATABLE-READRDS默認隔離度為默認隔離度為READ-COMMITTED隔離級別隔離級別允許臟讀允許臟讀不可重復讀不可重復讀幻象讀幻象讀READ UNCOMMITTED允許允許允許READ COMMITTED不允許允許允許REPEATABLE READ不允許不允許允許SERIALIZABLE不允許不允許不允許事務和并發控制事務隔離度 查看當前會話的事務隔離度-show variables like%tx%-SELECT session.tx_isolation 更改當前會話的提交方式-SET tx_isolation=READ-COMMITTED-set sessi24、on.tx_isolation=READ-COMMITTED事務和并發控制事務管理 自動提交-每個DML都是一個事務,數據更改后不能撤銷,默認方式 手工提交-通過commit永久保存數據更改,rollback 撤銷數據更改事務和并發控制事務查看當前會話的提交方式-show variables like autocommitON=自動提交,OFF=手動提交-SELECT session.autocommit1=自動提交,0=手動提交更改當前會話的提交方式-set autocommit=OFF-set session.autocommit=0事務與并發控制事務與并發控制鎖機制用于管理對共享資源的并25、發訪問鎖機制用于管理對共享資源的并發訪問DML鎖,確保任何時刻只有一人修改某行數據鎖,確保任何時刻只有一人修改某行數據TX鎖鎖(事務鎖事務鎖)每個事務會獲得一個每個事務會獲得一個TX鎖鎖TM鎖鎖 用于確保在修改表的內容時,表結構不會用于確保在修改表的內容時,表結構不會改變改變DDL鎖鎖,確保確保DDL操作時操作時 對象不會被其他會話修改對象不會被其他會話修改排他排他DDL鎖鎖 防止結構和數據被其他會話修改防止結構和數據被其他會話修改共享共享DDL 鎖鎖 防止結構被其他會話修改防止結構被其他會話修改事務和并發控制并發控制通過鎖實現并發控制 鎖的類型-共享鎖-獨占鎖 鎖的粒度-表級鎖-頁級鎖-行級26、鎖并發控制與鎖并發控制與鎖鎖定問題鎖定問題丟失更新丟失更新悲觀鎖定悲觀鎖定樂觀鎖定樂觀鎖定阻塞(阻塞(block)死鎖死鎖數據庫開發基礎事務與并發控制事務與并發控制索引設計與使用索引設計與使用SQL開發的基本原則開發的基本原則72索引 一種數據庫對象 通過指針,數據庫服務使用它來提高檢索數據的速度 通過快速路徑來定位數據,減少磁盤的I/O 獨立于其索引的表 被數據庫服務自動使用和維護索引索引特點 為提高查詢速度而設計 B Tree索引,平衡樹,通過索引掃描定位記錄 性能基本與記錄數無關 INNODB 表都是索引組織表,表數據是按主鍵順序排序的 二級索引葉子節點存儲索引鍵值和主鍵值 INNODB27、表定義必須有主鍵或唯一索引,如果沒有,則系統自動產生隱含主鍵74索引類型 唯一索引確保在所建列上只有一個唯一值(或值組合)非唯一索引提高檢索速度 單列索引只有一列 復合索引有多列75建索引的方式 自動建立當定義主鍵或者唯一性約束時,系統自動創建唯一索引 手工用戶通過建立索引,提高檢索記錄的速度.索引索引使用為哪些列創建索引?經常充當查詢條件的列:where CHNL_CODE=91b02sp表連接中使用到的列:from RES_NUMBER_BATCH join NUMBER_BATCH_DETAIL ON RES_NUMBER_BATCH.BATCH_NO=NUMBER_BATCH_DETA28、IL.BATCH_NO頻繁執行的可被索引全覆蓋的列:SELECT OCCUPY_PROVINCE_CODE,OCCUPY_AREA_CODE FROM RES_LOCKING_NUMBE排序中經常用到的字段:SELECT.FROM RES_NUM_STORE WHERE PARENT_STORE_ID=17733691AND NOW()=IFNULL(eff_date,NOW()and IFNULL(exp_date,NOW()=NOW()order by STORE_TYPE那些列不建議 建索引經常被更新的列,唯一值很少的列,例如status、type 等類型的字段索引設計原則 單表索引建議29、控制在5個以內 復合索引字段數不建議超過5個 建立復合索引,建議把區分度高的字段放在前面 不建議在頻繁更新或者區分度不高的字段上建立索引索引索引使用復合索引,聯合索引:多個字段組成的索引只有查詢條件中包含索引的第一個字段,索引才會被使用建議將最常用做查詢條件的字段作為索引的第一個字段建議將選擇性高的字段作為索引的第一個字段索引優化7復應用系統中索引使用常見問題索引缺失索引設計不合理,導致選擇錯誤的索引復合索引設計不合理,導致沒有使用索引索引過多,單個表上的索引建議不超過5個索引重復,一個字段上建多個索引在選擇性差的字段上建立索引SQL Where 條件中 發生字段類型轉換、計算等導致查詢無法使30、用索引數據庫開發基礎事務與并發控制事務與并發控制索引設計與使用索引設計與使用SQL開發的基本原則開發的基本原則81基礎原則不建議使用存儲過程、視圖、觸發器每張核心數據表數據量建議控制在1000W以內高并發大數據的業務系統,建議解放數據庫CPU,將復雜業務邏輯計算處理轉移到服務層不建議在數據庫內存儲大文件或者大照片避開在業務高峰期批量更新、做復雜查詢統計82表設計單表列數目不宜過多表必須有主鍵建議盡量使用和應用無關的主鍵,例如自增主鍵建議選擇較短的數據類型做主鍵不建議用組合索引做主鍵不建議使用外鍵(外鍵完整性約束,由應用程序控制)選擇合適的數據類型根據業務要求選擇合適類型,避免類型轉換根據需求選31、擇合適長度如果字段內容為數字,建議用整形不用CHARCHAR和VARCHAR的選擇謹慎使用 TEXT、BLOB等大數據類型 選擇合適的約束類型NOT NULL的約束,NOT NULL WITH DEFAULT 唯一鍵約束主鍵約束建議所有字段定義為NOT NULL,并定義缺省值表設計了解業務開發人員和DBA都需要了解業務情況 區分sql的執行環境,是前臺還是后臺?評估sql的執行頻率,每天千萬次查詢和每天幾千次查詢是不一樣的 評估sql返回的數據量,關心每條數據還是只關心前面100條?關心所有字段信息,還是只關心真正對用戶有意義的字段?評估表的數據量和增量,從而評估sql的執行效率84SQL編寫32、原則 避免復雜的SQL語句,每個語句完成特定的功能 盡量避免復雜多表關聯,建議盡量分解查詢,通過程序傳遞主鍵值給下一個表 關聯查詢 選擇用較小的表或結果集做驅動表 簡單=高性能,高擴展性 避免不必要的工作 不必要的數據讀取,例如 select*語句 不必要的join,盡量減少表之間的關聯 不必要的排序Distinct、Group by、Order by、UnionSQL編寫原則 select 語句禁止使用*,INSERT 語句必須明確列名 使用表的別名 連接多個表時,把表的別名前綴于每個column上 減少解析的時間以及由column歧義引起的語法錯誤 使用復合索引的第一個列 拆分大事務為小的事務 整合小事務,同一提交 及時commit釋放占用的鎖等資源SQL編寫原則 Where條件中等號左邊不要引用函數 Where條件中對于不同的數據類型要做顯示數據轉換 NOT,!=,|不會用索引 慎用 not exists 和 exists(MySQL對此類SQL處理很差)用UNION ALL代替UNION(避免排序)謝謝!謝謝!