前言:
??隨著年齡的增長生活瑣碎的事情、煩心的事情日漸增多,怠慢了更新,
1.什么是數據庫
DB.DataBase 數據庫:
依照某種數據模型進行組織并存放到存儲器的數據集合
DBMS.DataBase Management System – 數據庫管理系統:
用來操縱和管理數據庫的大型服務 軟件
DBS.DataBase System – 數據庫系統:
即 DB+DBMS ,指帶有數據庫并整合了數據庫管理軟件的計算機系統。
2.主流數據庫服務軟件有哪些?開源且跨平臺的數據庫軟件有哪些?
主流數據庫服務軟件有:
甲骨文公司 Oracle
IBM DB2
微軟 SQL Server
美國 Sybase 公司 Sybase
加州大學伯克利分校計算機系開發的 PostgreSQL
開源且跨平臺的數據庫軟件有:
MySQL、PostgreSQL:開源且跨平臺
Oracle、DB2:跨平臺不開源
SQL Server:不跨平臺不開源
Sybase:跨平臺不開源
3.MySQL 的特點及應用
主要特點
– 適用于中小規模、關系型數據庫系統
– 支持 Linux/Unix 、 Windows 等多種操作系統
– 使用 C 和 C++ 編寫,可移植性強
– 通過 API 支持 Python/Java/Perl/PHP 等語言
典型應用環境
– LAMP 平臺,與 Apache HTTP Server 組合
– LNMP 平臺,與 Nginx 組合
4.mysql 服務相關參數有什么?
文件 說明
/etc/my.cnf 主配置文件
/var/lib/mysql 數據庫目錄
默認端口號 3306
進程名 mysqld
傳輸協議 TCP
進程所有者 mysql
進程所屬組 mysql
5.mysql 操作指令和注意事項?
操作指令類型
– MySQL 指令:環境切換、看狀態、退出等控制
– SQL 指令:數據庫定義 / 查詢 / 操縱 / 授權語句
基本注意事項
– 操作指令不區分大小寫(密碼、變量值除外)
– 每條 SQL 指令以 ; 結束或分隔
– 不支持 Tab 鍵自動補齊
– \c 可廢棄當前編寫錯的操作指令
6.庫管理命令都有什么?
– Show databases; // 顯示已有的庫
– Use 庫名 ; // 切換庫
– Select database(); // 顯示當前所在的庫
– Create database 庫名 ; // 創建新庫
– Show tables; // 顯示已有的表
– Drop database 庫名; // 刪除庫
7.常見的信息種類
? 數值型:體重、身高、成績、工資
? 字符型:姓名、工作單位、通信住址
? 枚舉型:興趣愛好、性別
? 日期時間型:出生日期、注冊時間
8.(數值型)關于整數型字段
– 使用 UNSIGNED 修飾時,對應的字段只保存正數
– 數值不夠指定寬度時,在左邊填空格補位
– 寬度僅是顯示寬度,存數值的大小由類型決定
– 使用關鍵字 ZEROFILL 時,填 0 代替空格補位
– 數值超出范圍時,報錯。
9.(數值型)關于浮點型字段
– 定義格式: float( 總寬度 , 小數位數 )
– 當字段值與類型不匹配時,字段值作為 0 處理
– 數值超出范圍時,僅保存最大 / 最小值
10.字符類型
? 定長: char( 字符數 )
– 最大長度 255 字符
– 不夠指定字符數時在右邊用空格補齊
– 字符數斷超出時,無法寫入數據。
? 變長: varchar( 字符數 )
– 按數據實際大小分配存儲空間
– 字符數斷超出時,無法寫入數據。
? 大文本類型: text/blob
– 字符數大于 65535 存儲時使用
11.日期時間類型
? 日期時間, DATETIME
– 占用 8 個字節
– 范圍: 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999
? 日期時間, TIMESTAMP
– 占用 4 個字節
– 范圍: 1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999
? 日期, DATE
– 占用 4 個字節
– 范圍: 0001-01-01 ~ 9999-12-31
? 年份, YEAR
– 占用 1 個字節
– 范圍: 1901~2155
? 時間, TIME
– 占用 3 個字節
– 格式: HH:MM:SS
12.時間函數
類型 用途
now() 獲取系統當前日期和時間
year() 執行時動態獲得系統日期時間
sleep(N) 休眠 N 秒
curdate() 獲取當前的系統日期
curtime() 獲取當前的系統時刻
month() 獲取指定時間中的月份
date() 獲取指定時間中的日期
time() 獲取指定時間中的時刻
13.枚舉類型
? 從給定值集合中選擇單個值, ENUM
– 定義格式: enum( 值 1, 值 2, 值 N)
? 從給定值集合中選擇一個或多個值, SET
– 定義格式: set( 值 1, 值 2, 值 N)
14. 約束條件
? Null 允許為空,默認設置
? NOT NULL 不允許為空 ? Key 索引類型
? Default 設置默認值,缺省為 NULL
15. 修改表結構的基本用法
– ALTER TABLE 表名 執行動作 ;
Add 添加字段
Modify 修改字段類型
Change 修改字段名
Drop 刪除字段
Rename 修改表名
16.索引是什么?
– 索引是對記錄集的多個字段進行排序的方法。
– 類似于書的目錄
– 索引類型包括 :Btree 、 B+tree 、 hash
17.索引優缺點?
? 索引優點
– 通過創建唯一性索引,可以保證數據庫表中每一行數 據的唯一性
– 可以加快數據的檢索速度
? 索引缺點
– 當對表中的數據進行增加、刪除和修改的時候,索引 也要動態的維護,降低了數據的維護
速度
– 索引需要占物理空間
18.鍵值類型有幾種,分別是什么?
? INDEX :普通索引
? UNIQUE :唯一索引
? FULLTEXT :全文索引
? PRIMARY KEY :主鍵
? FOREIGN KEY :外鍵
19.INDEX 普通索引說明?
– 一個表中可以有多個 INDEX 字段
– 字段的值允許有重復,切可以賦 NULL 值
– 經常把做查詢條件的字段設置為 INDEX 字段
– INDEX 字段的 KEY 標志是 MUL
20.primary key 主鍵注意事項
– 一個表中只能有一個 primary key 字段
– 對應的字段值不允許有重復,且不允許賦 NULL 值
– 如果有多個字段都作為 PRIMARY KEY ,稱為復合主 鍵,必須一起創建。
– 主鍵字段的 KEY 標志是 PRI
– 通常與 AUTO_INCREMENT 連用
– 經常把表中能夠唯一標識記錄的字段設置為主鍵字段
21.foreign key 外鍵 什么是外鍵?
– 讓當前表字段的值在另一個表中字段值的范圍內選擇 。
? 使用外鍵的條件
– 表的存儲引擎必須是 innodb
– 字段類型要一致
– 被參照字段必須要是索引類型的一種 (primary key)
22.簡述 MySQL 體系結構的組成,并描述每個組成部分的作用。
主要包括 8 個部分:
連接池:進程數限制、內存檢查、緩存檢查等。
SQL 接口:用戶通過 sql 客戶端發過來的命令,由 sql 接口接收,sql 操作(DML 數據操作語
言:查詢、修改、升級數據等;DDL 數據定義語言:創建一個新的數據庫、新的索引、刪除一
個用戶等;存儲過程、視圖觸發器。
分析器: 分析查詢語句 事務處理 對象訪問權限。
優化器: 優化訪問路徑 、 生成執行樹。
緩存和緩沖:保存 sql 查詢結果。
存儲引擎:用于管理存儲的文件系統,將邏輯結構轉換為物理結構的程序;不同的存儲引擎有
不同的功能和存儲方式。
管理工具:備份,恢復,安全,移植,集群等,這些工具一般和文件系統打交道,不需要和
mysql-server 打交道,它們對應的都是命令。
物理存儲設備(文件系統)。
23.MySQL 存儲引擎
? 作為可插拔式的組件提供
– MySQL 服務軟件自帶的功能程序,處理表的處理器
– 不同的存儲引擎有不同的功能和數據存儲方式
? 默認的存儲引擎
– MySQL 5.0/5.1 —> MyISAM
– MySQL 5.5/5.6 —> InnoDB
24.Myisam 存儲引擎的主要特點
– 支持表級鎖
– 不支持事務、事務回滾、外鍵
? 相關的表文件
– 表名 .frm 、 – 表名 .MYI – 表名 .MYD
25.InnoDB 存儲引擎主要特點
– 支持行級鎖定
– 支持事務、事務回滾、支持外鍵
? 相關的表文件
– xxx.frm 、 xxx.ibd
– ibdata1
– ib_logfile0 – ib_logfile1
26.MySQL 鎖機制
? 鎖粒度
– 表級鎖:一次直接對整張表進行加鎖。
– 行級鎖:只鎖定某一行。
– 頁級鎖:對整個頁面( MySQL 管理數據的基本存儲單 位)進行加鎖。
? 鎖類型
– 讀鎖(共享鎖):支持并發讀。
– 寫鎖(互斥鎖、排它鎖):是獨占鎖,上鎖期間其他 線程不能讀表或寫表。
27.數據庫事務的事務特性 (ACID)
? Atomic :原子性
– 事務的整個操作是一個整體,不可分割,要么全部成 功,要么全部失敗。
? Consistency : 一致性
– 事務操作的前后,表中的記錄沒有變化。
? Isolation :隔離性
– 事務操作是相互隔離不受影響的。
? Durability :持久性
– 數據一旦提交,不可改變,永久改變表數據
28.數據導入基本用法和注意事項
? 基本用法
– LOAD DATA INFILE “ 目錄名 / 文件名” INTO TABLE 表名 FIELDS TERMINATED BY “ 分
隔符” LINES TERMINATED BY “\n”;
? 注意事項
– 字段分隔符要與文件內的一致
– 指定導入文件的絕對路徑
– 導入數據的表字段類型要與文件字段匹配
– 禁用 SElinux
29.數據導出基本用法和注意事項
– SELECT 查詢 … … INTO OUTFILE “ 目錄名 / 文件名” FIELDS TERMINATED BY “ 分隔
符” LINES TERMINATED BY “\n”;
?注意事項
– 導出的內容由 SQL 查詢語句決定
– 禁用 SElinux
30.增加表記錄的格式
格式 1 :
給所有字段賦值
– INSERT INTO 表名 VALUES
( 字段 1 值, … … ,字段 N 值 ) ,
( 字段 1 值, … … ,字段 N 值 ) ,
( 字段 1 值, … … ,字段 N 值 ) , … … ;
格式 2
給指定字段賦值
– INSERT INTO 表名 ( 字段 1,… …, 字段 N) VALUES
( 字段 1 值,字段 2 值,字段 N 值 ) ,
( 字段 1 值,字段 2 值,字段 N 值 ) ,
( 字段 1 值,字段 2 值,字段 N 值 ) ,
… … ;
注意事項
字段值要與字段類型相匹配
對于字符類型的字段,要用雙或單引號括起來
依次給所有字段賦值時,字段名可以省略
只給一部分字段賦值時,必須明確寫出對應的字段名稱
31.查詢表記錄
語法格式
? 格式 1
ELECT 字段 1, … …, 字段 N FROM 表名 ;
? 格式 2
SELECT 字段 1, … …, 字段 N FROM 表名 WHERE 條件表達式 ;
? 注意事項
使用 * 可匹配所有字段
指定表名時,可采用 庫名 . 表名 的形式
32.更新表記錄
語法格式
? 格式 1 ,
更新表內的所有記錄
– UPDATE 表名
SET 字段 1= 字段 1 值 , 字段 2= 字段 2 值 , 字段 N= 字段 N 值 ;
格式 2 ,
只更新符合條件的部分記錄
– UPDATE 表名 SET 字段 1= 字段 1 值 , 字段 2= 字段 2 值 , 字段 N= 字段 N 值 ;
WHERE 條件表達式 ;
33. 注意事項
字段值要與字段類型相匹配
對于字符類型的字段,要用雙或單引號括起來
若不使用 WHERE 限定條件,會更新所有記錄
限定條件時,只更新匹配條件的記錄
34.刪除表記錄
? 格式 1 ,
僅刪除符合條件的記錄
– DELETE FROM 表名 WHERE 條件表達式 ;
? 格式 2, 刪除所有的表記錄
– DELETE FROM 表名 ;
35.基本查詢條件
數值比較
= 等于 > 、 >= 大于、大于或等于 < 、 <= 小于、小于或等于 != 不等于
字符比較
= 相等
!= 不相等
IS NULL 匹配空
IS NOT NULL 非空
邏輯比較
? 多個判斷條件時使用
OR 邏輯或
AND 邏輯與
! 邏輯非
( ) 提高優先級
范圍內匹配 / 去重顯示
? 匹配范圍內的任意一個值即可
In ( 值列表 ) 在…里…
Not in ( 值列表 ) 不在…里…
Between 數字 1 and 數字 2 在…之間…
DISTINCT 字段名 去重顯示
36.聚集函數都有哪些?
? MySQL 內置數據統計函數
– avg( 字段名 ) : 求平均值
– sum( 字段名 ) :求和
– min( 字段名 ) : 統計最小值
– max( 字段名 ) :統計最大值
– count( 字段名 ) :統計個數
37.常見的 MySQL 管理工具有哪些?
mysql 命令行 跨平臺 MySQL 官方 bundle 包自 帶
MySQL-Workbench 圖形 跨平臺 MySQL 官方提供
MySQL-Front 圖形 Windows 開源,輕量級客戶端軟件
phpMyAdmin 瀏覽器 跨平臺 開源,需 LAMP 平臺
Navicat 圖形 Windows 專業、功能強大,商業版
38.安裝 PhpMyAdmin 基本思路是什么?
- 安裝 httpd 、 mysql 、 php-mysql 及相關包
- 啟動 httpd 服務程序
- 解壓 phpMyAdmin 包,部署到網站目錄
- 配置 config.inc.php ,指定 MySQL 主機地址
- 創建授權用戶
- 瀏覽器訪問、登錄使用
39.密碼忘了怎么辦?
7. 停止 MySQL 服務程序
8. 跳過授權表啟動 MySQL 服務程序 skip-grant-tables
9. 重設 root 密碼(更新 user 表記錄)
10. 以正常方式重啟 MySQL 服務程序
40.簡述 MySQL 數據庫訪問的執行過程。
客戶端發出請求。
2)服務器端開辟線程響應客戶端請求。
3)客戶端發起 sql 語句查詢數據庫。
4)查詢緩存:記錄用戶的 sql 查詢語句,如果查詢內容相同,直接從查詢緩存回復。
5)如果緩存沒有進入分析器。
6)分析器:分析用戶命令語法是否正確,將用戶的命令進行切片,一個詞一個詞用空格隔開,
獲得用戶要查詢的表、內容、用戶的權限等。
7)優化器:執行路徑的選擇,生成執行樹。(每個 SQL 語句都有很多執行路徑,優化的目的就
是在這些執行路徑里選擇最優的執行路徑)。
8)存儲引擎:用于管理存儲的文件系統,不同的存儲引擎有不同的功能和存儲方式。
41.GRANT 配置授權用法和注意事項?
? 基本用法
– GRANT 權限列表 … … ON 庫名 . 表名
– TO 用戶名 @’ 客戶端地址 ’
– IDENTIFIED BY ’ 密碼 ’
– [ WITH GRANT OPTION ];
? 注意事項
– 當庫名 . 表名 為 . 時,匹配所有庫所有表 – 授權設置存放在 mysql 庫的 user 表
42.mysql 授權的權限列表分類?
– all :匹配所有權限
– SELECT,UPDATE,INSERT … …
– SELECT,UPDATE ( 字段 1, … … , 字段 N)
43.mysql 授權的客戶端地址方法?
– % :匹配所有主機
– 192.168.1.% :匹配指定的一個網段
– 192.168.1.1 :匹配指定 IP 地址的單個主機
– %.tarena.com :匹配一個 DNS 區域
– svr1.tarena.com :匹配指定域名的單個主機
撤銷用戶權限的格式用法?
? 基本用法 – REVOKE 權限列表 ON 庫名 . 表名 – FROM 用戶名 @’ 客戶端地址 ';
44.簡述 MySQL 數據庫中插入、更新、查詢、刪除表記錄的指令格式。
連接到 MySQL 數據庫服務器,練習以下表記錄操作:
向表中插入記錄的語法格式
更新表記錄的語法格式
查詢表記錄的語法格式
刪除表記錄的語法格式
參考答案
1)向表中插入記錄的語法格式
insert (into)表名(字段名列表) values(字段名=值,字段名=值,…);
2)更新表記錄的語法格式
update 表名(set) (字段名=值,字段名=值,…) where(條件表達式列表);
3)查詢表記錄的語法格式
select (字段名列表) (from) 表名 (where) 條件表達式列表;
4)刪除表記錄的語法格式
delete (from) 表名 (where) ( 條件表達式列表);
45.數據備份策略有那幾種?
? 完全備份 – 備份所有數據(一臺服務器、一個庫、一張表)
? 增量備份 – 備份自上一次備份(包含完全備份、差異備份、增量 備份)之后有變化的數據
? 差異備份 – 備份自上一次完全備份之后有變化的數據
46.邏輯備份及恢復
? 備份操作 – mysqldump 源庫名 > 路徑 /xxx.sql
? 恢復操作 – mysql 目標庫名 < 路徑 /xxx.sql
47.利用 binlog 恢復數據的基本思路?
– 使用 mysqlbinlog 提取歷史 SQL 操作
– 通過管道交給 mysql 命令執行
48.常用的 MySQL 備份工具 的缺點?
? 物理備份缺點
– 跨平臺性差
– 備份時間長、冗余備份、浪費存儲空間 ?
mysqldump 備份缺點
– 效率較低,備份和還原速度慢
– 備份過程中,數據插入和更新操作會被掛起
49.介紹一下 XtraBackup 工具是什么?
? 一款強大的在線熱備份工具
– 備份過程中不鎖庫表,適合生產環境
– 由專業組織 Percona 提供(改進 MySQL 分 支)
? 主要含兩個組件
– xtrabackup : C 程序,支持 InnoDB/XtraDB
– innobackupex :以 Perl 腳本封裝 xtrabacku p ,還支持 MyISAM
50 什么是讀寫分離?
MySQL Proxy 最強大的一項功能是實現“讀寫分離(Read/Write Splitting)”。基本的原理是
讓主數據庫處理事務性查詢,而從數據庫處理 SELECT 查詢。數據庫復制被用來把事務性查詢導
致的變更同步到集群中的從數據庫。 當然,主服務器也可以提供查詢服務。使用讀寫分離最大
的作用無非是環境服務器壓力。