第 第1 章 數(shù)據(jù)庫章節(jié)
1.1 選擇
1.1.1 Having 子句的作用是(C) 卓鹿。
A.查詢結(jié)果的分組條件 B.組的篩選條件
C.限定返回的行的判斷條件 D.對結(jié)果集進行排序
1.1.2 最常用的一種基本數(shù)據(jù)模型是關系數(shù)據(jù)模型,它的表示采用(D )
A.樹 B.網(wǎng)絡 C.圖 D.二維表
1.1.3 數(shù)據(jù)庫系統(tǒng)的核心是(B )
A.數(shù)據(jù)模型 B.數(shù)據(jù)庫管理系統(tǒng) C.數(shù)據(jù)庫 D.數(shù)據(jù)庫管理員
1.1.4 關系表中每一橫行稱為(B )
A.元組 B.字段 C.屬性 D.碼
1.1.5 數(shù)據(jù)庫管理系統(tǒng)維護中,最重要的是(數(shù)據(jù)維護)
程序維護 數(shù)據(jù)維護 編碼維護 硬件維護
1.1.6 以下那些不是 NoSQL
mssql memcached mongodb postgresql cassandra couchdb redis
1.1.7 PHP 和 MYSQL 的聯(lián)合使用解決了(C )
A 在 proxy 上處理數(shù)據(jù)庫訪問問題
B 在 www 服務器上處理黑客的非法訪問問題
C 在 www 服務器上處理數(shù)據(jù)庫的訪問問題
D 在 sendmail 郵件系統(tǒng)是上處理數(shù)據(jù)庫的訪問問題
1.1.8 以下哪個端口為遠程登陸默認端口(3306)
1433 3389 3306
1.2 填空
1.2.1 如何通過 shell 登錄 mysql 扬蕊?(mysql -u -p -h -P )
1.2.2 數(shù)據(jù)庫觸發(fā)器能監(jiān)控的觸發(fā)事件有 數(shù)據(jù)庫觸發(fā)器能監(jiān)控的觸發(fā)事件有 ———— 監(jiān)視地點(table) 監(jiān)視事件(insert/update/delete) 觸 觸
發(fā)時間(after/before) 觸發(fā)事件(insert/update/delete) ————
1.2.3 數(shù)據(jù)庫系統(tǒng)的組成部分有:硬件治宣、軟件墓怀、數(shù)據(jù)庫汽纠、用戶(數(shù)據(jù)庫管理員)
1.2.4 實現(xiàn)多臺交換機或集線器連接在一起只能通過級聯(lián)的方式(級聯(lián)復制)
1.2.5 遠程連接 mysql 數(shù)據(jù)庫的命令是什么mysql -u -p -h -P
1.2.6 當刪除一個數(shù)據(jù)庫后,僅能用binlog , 物理備份 數(shù)據(jù)重建以前的數(shù)據(jù)庫中 的數(shù)據(jù)
1.2.7 SQL 中定義別名的三種方法是___ 列 AS 別名___ 列 別名_____ 別名= 列________________
1.2.8 mysql 服務器默認的監(jiān)聽端口是:3306____ 傀履,mysql 的配置文件是:/etc/my.cnf_______
1.3 簡答
1.3.1 簡述 mysql 單機安裝過程
1.在官網(wǎng)下載二進制 包
- 解壓虱朵,并修改/etc/my.cnf 文件
3.初始化數(shù)據(jù)
4.啟動
1.3.2 mysql 登錄命令
mysql -u -p -h -P
1.3.3 說明數(shù)據(jù)庫內(nèi)存結(jié)構(gòu)中 SGA 和 和 PGA 的組成,以及這兩個內(nèi)存區(qū)存放信息的區(qū)別
SGA 區(qū)由數(shù)據(jù)緩沖區(qū)碴犬、共享池唠椭、重做日志緩沖區(qū)、大型池贞岭、JAVA 池構(gòu)成俊柔;PGA 區(qū)由排序區(qū)、私有
SQL 區(qū)以及堆棧構(gòu)成。
SGA 區(qū)是由 Oracle 分配的共享內(nèi)存結(jié)構(gòu),包含一個數(shù)據(jù)庫實例共享的數(shù)據(jù)和控制信息。當多個用戶
同時連接同一個實例時,SGA 區(qū)數(shù)據(jù)供多個用戶共享趁窃,所以 SGA 區(qū)又稱為共享全局區(qū)像屋。用戶對數(shù)
據(jù)庫的各種操作主要在 SGA 區(qū)中進行色乾。該內(nèi)存區(qū)隨數(shù)據(jù)庫實例的創(chuàng)建而分配,隨實例的終止而釋
放暖璧。PGA 區(qū)是在用戶進程連接數(shù)據(jù)庫案怯,創(chuàng)建一個會話時,由 Oracle 為用戶分配的內(nèi)存區(qū)域澎办,保存當
前用戶私有的數(shù)據(jù)和控制信息嘲碱,因此該區(qū)又稱為私有全局區(qū)。每個服務器進程只能訪問自己的 PGA
區(qū)局蚀,所有服務器進程 PGA 區(qū)總和即為實例的 PGA 區(qū)的大小麦锯。
1.3.4 說明數(shù)據(jù)庫表空間的種類,以及不同類型表空間的作用
共享表空間琅绅,獨立表空間
共享表空間是一個庫的數(shù)據(jù)都存放一個文件內(nèi)扶欣,獨立表空間是一個表一個 ibd 與 frm 文件
1.3.5 mysql 表中的中文字體亂碼,原因可能是什么?如何修改
字符集編碼問題
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
1.3.6 mysql 忘記密碼如何操作
--skip-grant-tables ----> 跳過授權表(mysql.user)
--skip-networking ----> 跳過網(wǎng)絡用戶連接
1.3.7 請寫出目前市場上最常見的 2-5 種關系型數(shù)據(jù)庫廠家宵蛀,并注明他們產(chǎn)品的最新版和你熟悉的或
者解除過的版本:
廠家: 最新版本: 熟悉的版本: 接觸過的版本
mysql 5.6 5.7
Oracle现喳、MsSQL(SQL Server)翔悠、PG
1.3.8 如何修改 mysql 的 的 root 密碼
set password for 用戶名@localhost = password('新密碼');
1.3.9 請舉出幾個你熟悉的關系型數(shù)據(jù)庫管理系統(tǒng)和非關系型數(shù)據(jù)庫管理系統(tǒng)复唤,非關系型數(shù)據(jù)庫相比 請舉出幾個你熟悉的關系型數(shù)據(jù)庫管理系統(tǒng)和非關系型數(shù)據(jù)庫管理系統(tǒng)靠娱,非關系型數(shù)據(jù)庫相比
之下有什么不同之處(好處和不足)薄腻?
關系型:mysql念逞,Oracle
非關系型:redis候衍,mongodb
非關系快蛇尚,操作簡單摆碉,有幾率丟數(shù)據(jù)
1.3.10 存儲過程與函數(shù)的區(qū)別
存儲過程是用戶定義的一系列 sql 語句的集合塘匣,涉及特定表或其它對象的任務,用戶可以調(diào)用存儲
過程巷帝,而函數(shù)通常是數(shù)據(jù)庫已定義的方法忌卤,它接收參數(shù)并返回某種類型的值并且不涉及特定用戶
表。
1.3.11 什么是視圖楞泼,游標是什么驰徊?
視圖是一種虛擬的表,具有和物理表相同的功能堕阔」鞒В可以對視圖進行增,改超陆,查牺弹,操作,視圖通常是
有一個表或者多個表的行或列的子集时呀。對視圖的修改不影響基本表张漂。它使得我們獲取數(shù)據(jù)更容易,
相比多表查詢谨娜。
游標:是對查詢出來的結(jié)果集作為一個單元來有效的處理鹃锈。游標可以定在該單元中的特定行,從結(jié)
果集的當前行檢索一行或多行瞧预∈赫可以對結(jié)果集當前行做修改。一般不使用游標垢油,但是需要逐條處理
數(shù)據(jù)的時候盆驹,游標顯得十分重要。
1.3.12 你對數(shù)據(jù)庫了解嗎滩愁?你們公司的數(shù)據(jù)庫是什么樣的躯喇?
我們公司是高可用 MySQL 及主從架構(gòu)與讀寫分離,使用的 MySQL
1.3.13 你們公司數(shù)據(jù)庫最大連接數(shù)是多少?
目前了解并發(fā)不到 2000
1.3.14 MySQL 數(shù)據(jù)庫 storage engine 中的 myisam 正压、innodb 有什么差別
myisam 是表級鎖,不支持事務拓劝,支持溫備
innodb 是行級鎖,支持事務,自動故障恢復嘉裤,外鍵厢洞,熱備
1.3.15 請列舉幾個常見的 nosql db 你最熟悉那個犀变?
redis
memcached
mongodb
1.3.16 簡述 where 和 和 having 的區(qū)別:
Where 子句是用來指定 "行" 的條件的,而 Having 子句是指定 “組” 的條件的
所以 Where 子句 = 指定行所對應的條件
所以 Having 子句 = 指定組所對應的條件
當在 Where 子句和 Having 子句中都可以使用的條件省店,從語句的執(zhí)行效率來看,最好寫在 Where 子
句中。
在使用 Count 函數(shù)等對表中的數(shù)據(jù)進行聚合操作時寸认,DBMS 內(nèi)部會進行排序處理偏塞,而排序操作會增
加機器的負擔,減少排序的行數(shù)古今,可以增加處理速度氓拼。
使用 Where 子句指定條件時撬即,由于排序之前就對數(shù)據(jù)進行了過濾唱歧,所以能夠減少排序的數(shù)據(jù)量颅崩。但
是 Having 子句是在排序之后才對數(shù)據(jù)進行分組的,因此與前者相比,需要排序的數(shù)據(jù)量就要多得
多漆弄。
第三,使用 Where 子句更具速度優(yōu)勢的另一個理由是,可以對 Where 子句指定條件所對應的列創(chuàng)建
索引恨锚,這樣可以大幅提高處理速度。
第四他挎,Where 子句中不能使用聚合函數(shù)筹淫,而 Having 子句中可以。
第 第2 章 SQL 語句
2.1 選擇
2.1.1 DELETE FROM S WHERE 年齡>60 語句的功能是(刪除 S 表的年齡列)
從 S 表中徹底刪除年齡大于 60 歲的記錄
S 表中年齡大于 60 歲的記錄被加上刪除標記
刪除 S 表
刪除 S 表的年齡列
2.1.2 使用什么命令可以清除表中所有的內(nèi)容? (C)
A.INSERT B.UPDATE C.DELETE D.TRUNCATE
2.1.3 以下哪個表不用于 mysql 的權限管理(C )
A.HOST B.DB C.COLUMNS_PRIV D.MANAGER
2.1.4 在 在 SOL 語法中,用于更新的命令是:( B)
A.INSERT B.UPDATE C.DELETE D.CREATE
2.1.5 下面命令中不是數(shù)據(jù)庫用來 DML 操作是( select drop )
A.SELECT B.UPDATE C.INSERT D.DROUP
2.1.6 SQL 語言中,刪除一個表的命令是(B )
A.DELETE B. DROP C.CLEAR D.RI MORE
2.1.7 MySQL 語句中刪除一個表(假如表名稱是 t1 )的命令是 drop table t1________
rm table t1 delete table t1 drop table t1 truncate t1
2.1.8 下面哪個語句將 user 表的名稱變更為 userinfo 比规?(rename user to userinfo rename user as
userinfo )
alter table user rename as userinfo rename to userinfo from user
rename user to userinfo rename user as userinfo
2.1.9 sql 語句中修改表結(jié)構(gòu)的命令是 (alter table)
modify table modify structure alter table alter structure
2.1.10 帶有(FOR UPDATE )子句的 select 語句可以在表的一行或多行上防止排他鎖
FOR INSERT FOR UPDATE FOR DELETE FOR REFRESH
2.1.11 在 在 SQL 中,建立表用的命令是(CREATE TABLE )
CREATE SCHEMA CREATE TABLE CREATE VIEW CREATE INDEX
2.1.12 SQL 語言是(關系數(shù)據(jù)庫 )語言
層次數(shù)據(jù)庫 網(wǎng)絡數(shù)據(jù)庫 關系數(shù)據(jù)庫 非數(shù)據(jù)庫
2.1.13 SQL 語言中,條件年齡 BETWEEN 15 AND 35 表示年齡在 15 至 至 35 之間,且(包括 15 歲和
35 歲)
包括 15 歲和 35 歲 不包括 15 歲和 35 歲
包括 15 歲但不包括 35 歲 包括 35 歲但不包括 15 歲
2.1.14 在數(shù)據(jù)庫管理系統(tǒng)能實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)查詢仔戈、插入、修改和刪除,這類功能稱為(數(shù)據(jù) 在數(shù)據(jù)庫管理系統(tǒng)能實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)查詢户敬、插入忠怖、修改和刪除,這類功能稱為(數(shù)據(jù)
操縱功能)
數(shù)據(jù)定義功能 數(shù)據(jù)管理功能 數(shù)據(jù)操縱功能 數(shù)據(jù)控制功能
2.1.15 下列執(zhí)行數(shù)據(jù)的刪除語法在運行時不會產(chǎn)生錯誤信息的選項是(Delete * from pat_visit
Where inp_no = '6' )
Delete * from pat_visit Where inp_no = '6' Delete From pat_visit Where inp_no ='6'
Delete pat_visit Where inp_no = '6' Delete pat_visit Set inp_no = '6'
2.2 填空
2.2.1 查詢病人表中的所有內(nèi)容,并以住院號倒序排序 SQL 代碼為:Select * from pat_visit _order
by haoma ;desc
2.2.2 查詢一根病人的信息。但忘記了該病人的名字哮笆,只記得該病人姓“張”福铅,而且名字中有一個 查詢一根病人的信息笆包。但忘記了該病人的名字,只記得該病人姓“張”,而且名字中有一個
“美”字肛根,SQL 代碼為:Select * from Pat_visit where name__like " 張"____
2.2.3 在 在 SQL 中,用子句 ————DISTINCT —————— 消除重復出現(xiàn)的元組储矩。
2.2.4 標準的 SQL 語言語句類型可以分為— —DML 、DQL 、DDL 洁仗、DCL ——
2.2.5 SQL 語句中的查詢語句是 select (DQL )
2.2.6 字符轉(zhuǎn)換 字符轉(zhuǎn)換 日期函數(shù)select date_format(now(), '%Y-%m-%d'); ___
2.2.7 DML 包括update delete ____ instert
2.2.8 在 在 SQL 中草冈,建立數(shù)據(jù)庫的命令是______ 哩俭,建立視圖的命令是_______ ,建立索引的是________
create database 名字
create view v as (select * from table1) union all (select * from table2);
alter table student add index idx_name(name);
2.2.9 在 在 SQL 中隙赁,用insert 命令向表中輸入數(shù)據(jù)轰驳,用select 命令檢查和查詢表中的內(nèi)容
select
select * from table_name;
2.2.10 在 在 SQL 中蝗肪,用update 命令可以修改表中的數(shù)據(jù),用_alter____ 命令可以修改表的結(jié)構(gòu)
2.2.11 在 在 SQL 中昙篙,Alter 命令可以有兩個選擇項,______ 子命令用于修改表的性質(zhì),____ 子命令用
于增加列
alter table change/modify
alter table add
2.2.12 在 在 SQL 中同蜻,用_delete 命令可以從表中刪除行,用_drop____ 命令可以從數(shù)據(jù)庫中刪除表
2.2.13 在 在 SQL 中,控制用保留字__NULL____ ,非空值用保留字_NOTNULL
2.2.14 SELECT 命令中亏掀,表示條件表達式用____ 字句温算,分組用_____ 字句,排序用____ 字句
where group by order by
2.2.15 在 在 ORDER BY 字句的選項中,DESC 代表___ 大到小__ 序輸出,若省略時闻丑,代表從 從 小到大
__ 序輸出
2.2.16 合并多個查詢結(jié)果集,應使用union 關鍵字
2.3 簡答
2.3.1 在 在 mysql 客戶端查詢工具中叁执,如何獲取當前的所有連接信息欢伏。
show full processlist
2.3.2 如何利用 crontab 定期執(zhí)行 mysql 語句径筏。
mysql -uroot -p -e 'show databases;'
2.3.3 查看缺省引擎
select @@default_storage_engine;
2.3.4 列舉 SQL 常用命令:
use database
show processlist;
show tables;
show variables like 'xx';
select * from database.table_name where;
explian select * from table;
2.3.5 Mysql 查看 order 表的第 3 條到第 7 條的數(shù)據(jù)抱究。
select * from order limit 2,5;
2.3.6 Mysql 授予用戶 admin 通過 IP 為 為 192.168.0.10/24 對數(shù)據(jù)庫的全部授權勋拟。
grant all on . to admin@'192.168.0.%' identified by '123';
2.3.7 對 對 order 這個表的 name 字段數(shù)據(jù)進行 base64 編碼
select to_base64(name) from order
2.3.8 為什么說 group by 和 和 order by 操作的是代價高昂的?
在沒有合理索引情況下,需要大量 CPU 時間來做排序和分組。
2.3.9 寫分組瀏覽,分組求和习勤,分組求最大值的 sql 語句,每個只能用 1 句話
瀏覽:select group_concat(字段名 1) from db group by 字段 2;
求和:select sum(字段名 1) from db group by 字段名 2;
最大值:select max(字段名 1) from db group by 字段名 2;
2.3.10 如何列出所有數(shù)據(jù)庫?(show databases; )
2.3.11 如何查看表內(nèi)所有數(shù)據(jù)?(select * from table; )
2.3.12 如何知道表內(nèi)行數(shù)?(select count(*) from table; )
2.3.13 用 用 SQL 實現(xiàn)以下統(tǒng)計結(jié)果
CSBH CSBH_COUNT
20 2
10 8
CSBH SUM_GJQJ
20 211.039900
10 871.317850
Select csbh,count(csbh) as CSBH_COUNT from table group by chbh;
Select csbh,sum(csbh) as CSBH_COUNT from table group by chbh;
2.3.14 用 用 SQL 命令實現(xiàn)給主鍵添加索引
alter table a add primary key pri(id);
2.3.15 刪除如下表中年齡大于 30 ,且住址為 nj 的員工
表 A user_table
Name age city
Tom 20 bj
Jimmy 50 nj
Zhou 33 sh
Jing 30 nj
Nanan 28 sh
create table user_table(
id int(11) auto_increment primary key,
name varchar(200),
age int(11),
city varchar(200))
engine=innodb;
insert into user_table(name,age,city) values('Tom',20,'bj'),
('Jimmy',50,'nj'),
('Zhou',33,'sh'),
('Jing',30,'nj'),
('Nanan',28,'sh');
delete from user_table where age>30 and city='nj';
2.3.16 根據(jù)上題的表,計算 根據(jù)上題的表,計算 出每個城市的人數(shù)和平均年齡
select city,count(name),AVG(age) from user_table group by city;
2.3.17 查詢下表平均成績大于 60 分的同學的學號 s_d) 和平均成績(score)
表 Student 學生表
S_id Sname Ssex
1 Xiaoli 男
2 xiaowang 女
3 zhanglong 男
4 zhaohu 女
表 Course 課 程 表
C_id Cname T_id
1 語文 1
2 歷史 3
3 數(shù)學 2
4 政治 4
表 SC 成績表
sid C_id score
1 2 99
3 4 88
1 3 55
2 1 77
表 Teacher 教師表
T_id Tname
1 zhangsan
2 lisi
3 wangwu
4 zhaoliu
create table Student(
S_id int primary key auto_increment,
Sname char(100),
Ssex char(100))
engine=innodb;
insert into Student(S_id,Sname,Ssex) values(1,'Xiaoli','男'),
(2,'xiaowang','女'),
(3,'zhanglong','男'),
(4,'zhaohu','女');
create table Course(
C_id int primary key auto_increment,
Cname char(100),
T_id int)
engine=innodb;
insert into Course(C_id,Cname,T_id) values
(1,'語文',1),
(2,'歷史',3),
(3,'數(shù)學',2),
(4,'政治',4);
create table SC(
sid int,
C_id int,
score int)
engine=innodb;
insert into SC(sid,C_id,score) values
(1,2,99),
(3,4,88),
(1,3,55),
(2,1,77);
create table Teacher(
T_id int auto_increment primary key,
Tname char(100))
engine=innodb;
insert into Teacher(T_id, Tname) values
(1,'zhangsan'),
(2,'lisi'),
(3,'wangwu'),
(4,'zhaoliu');
mysql> select sid,c from (select sid,avg(score) c from SC group by sid) a where c>60;
+------+---------+
| sid | c |
+------+---------+
| 1 | 77.0000 |
| 2 | 77.0000 |
| 3 | 88.0000 |
+------+---------+
查詢上所有同學的學號姓名执泰、選課數(shù)、總成績
mysql> select s.sname,s.S_id,count(s.S_id),sum(c.score) from Student s join SC c on s.S_id=c.sid group by
s.S_id;
+-----------+------+---------------+--------------+
| sname | S_id | count(s.S_id) | sum(c.score) |
+-----------+------+---------------+--------------+
| Xiaoli | 1 | 2 | 154 |
| xiaowang | 2 | 1 | 77 |
| zhanglong | 3 | 1 | 88 |
+-----------+------+---------------+--------------+
2.3.18 有兩個表 A 和 和 B 学密,表結(jié)構(gòu)和字段分別為:
A: B
ID Name ID hobby
1 tim 1 football
2 Jimmy 2 tennis
3 John 3 soccer
請寫出 Select A.Name, B.Hobbt from A,B where A.id = B.id 的結(jié)果
Select A.Name,B.Hobbt from A join B on A.ID = B.ID;
Tim football
Jimmy tennis
John soccer
2.3.19 寫出 MySQL5.6 新建用戶 dev 彤守,授權 op 庫 庫 test 表所有權限,任何地址的訪問權限 SQL
grant all on op.* to dev@'%' identfied by '123';
2.3.20 寫出一條 sql 語句:取出表 A 中滿足時間 2006 年 年 1 月 月 1 日至 2006 年 年 1 月 月 31 日的記錄(時間
為 字段為 time )
select * from A where time between '2006-01-01' and '2006-01-31';
2.3.21 寫出一條 SQL 語句:清除 A 表中的數(shù)據(jù),但不刪除表
truncate table A;
2.3.22 查找在機關單位任職的人員姓名、性別绿映、出生日期赴魁、單位名稱、并且查詢結(jié)果按照單位排 查找在機關單位任職的人員姓名潘拱、性別疹鳄、出生日期、單位名稱芦岂、并且查詢結(jié)果按照單位排
序瘪弓;
select 姓名,性別,出生日期,單位名稱 from table order by 單位名稱;
2.3.23 查找性別為女的少數(shù)民族的非中共人員姓名禽最、民族腺怯、出生日期;
select 姓名,民族,出生日期 from table where 性別=女 and 面貌!=中共人員
2.3.24 在事業(yè)單位查找具有研究生學歷博士學位的在任人員川无,要求顯示姓名呛占、性別、出生日期懦趋、政 在事業(yè)單位查找具有研究生學歷博士學位的在任人員晾虑,要求顯示姓名、性別、出生日期帜篇、政
糙捺; 治面貌、單位名稱笙隙、職務名稱继找、批準任職日期,同時結(jié)果按照批準任職日期升序逃沿;
select 姓名,性別,出生日期,政治面貌,單位名稱,職務名稱,批準任職日期 from db1 order by 批準任職日
期;
2.3.25 查詢在不同單位性質(zhì)類別的單位任職的人數(shù)婴渡;
select count(*) from db group by 單位;
2.3.26 請 請 寫出下列語句的執(zhí)行結(jié)果:select replace (ltrim(rtrim('abc3453436')),'34','abc')
abcabc5abc36
2.3.27 寫一個查詢語句,從數(shù)據(jù)庫表中取出年齡 age 最大的十個人
select * from table order by age desc limit 10;
2.3.28 編寫 SQL 語句凯亮。統(tǒng)計計算機系 58 班每個月過生日的男生人數(shù)边臼,井按月進行排序
表 dept (系):
dept_id(系編號),dept_name(系名稱)
表 class(班級):
class_id(班編號)假消,dept_i(系編號)柠并,class_name(班名)
表 setdent(學生):
setdent_id(學生編號),class_id(班編號), sex(性別),birthday(生日)
select dept.dept_name,class.class_name,count(student_id) date_format(student.birthday,%m)
from dept
join calss
on dept.dept_id=class.dept_i
join student
on class.calss_id=student.class_id
where student.sex=’m’
group by date_format(student.birthday,%m)
order by date_format(student.birthday,%m)
desc ;
2.3.29 現(xiàn)有 T 表:(字段:ID ,NAME 富拗,ADDRESS 臼予,PHONE ,LOGDATE )
查詢 T 表中地址中包含“北京”的 SQL 語句
select * from T where ADDRESS like '%北京%'啃沪;
插入一條數(shù)據(jù)到 T 表中
insert into T(ID粘拾,NAME,ADDRESS创千,PHONE缰雇,LOGDATE) value(1,2,3,4,5);
請寫出將 T 表中第 3~5 行數(shù)據(jù)列出來的 SQL 語句
select * from T limit 3,5;
2.3.30 Mysql 創(chuàng)建數(shù)據(jù)庫的命令,創(chuàng)建表的命令追驴,插入語句的命令械哟?
create database
create table
insert into
2.3.31 數(shù)據(jù)庫中的兩個數(shù)據(jù)庫表,定義如下:
表名 1:cardApply
字段(字段名/類型/長度):
applyNo varchar 8; //申請單號(關鍵字)
applyDate date 8; //申請日期
state varchar 2; //申請狀態(tài)
表 2:cardApplyDetail
字段(字段名/類型/長度):
applyNo varchar 8; //申請單號(關鍵字)
name varchar 30; //申請人姓名
idCard varchar 5; //ID 卡號
applyNo varchar 8; //申請單號(關鍵字)
其中殿雪,兩個表的關聯(lián)字段為申請單號暇咆,依據(jù)上述信息完成 1-5 題目:
查詢 ID 卡號為 11111 的申請日期
Select applyNo , applyDate from cardApply where applyNo=’1111’
查詢同一個 ID 卡號有兩條以上記錄的 ID 卡號及記錄個數(shù)
Select applyNo,count(applyNo) from cardApply group by applyNo having count(applyNo)>2;
將 ID 卡號為 11111 的記錄在兩個表中的申請狀態(tài)均改為 02
Update cardApply set state=‘02’ where applyNo=‘1111’丙曙;
刪除 cardApplyDetall 表中所有姓李的記錄
Delete from cardApplyDetall where name like ‘李%’;
假如某一天有 10 個人申請爸业,另外一天有 20 個人申請,還有一天有 30 個人申請河泳,查詢出申請卡最多
的那一天日期
Select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit
1;
2.3.32 第一題
Student S# Sname Sage Ssex 學生表
Course C# t# Cname () 課程表
SC S# C# score 成績表
Teacher T# tname 教師表
寫出學生表建表語句
Create table student(S# int not null primary key auto_increment comment ‘學號’沃呢,
Sname varchar(64) not null comment ‘姓名’,
Sage tinyint unsigned not null default 0 comment ‘年齡’,
Ssex enum(‘m’,’f’) not null default ‘m’ comment ‘性別’
)engine=innodb charset=utf8 comment ‘學生表’拆挥;
查詢姓張的學生名單
Select * from student where sname like ‘張%’;
查詢所有同學的學號、姓名、選課數(shù)纸兔、總成績
Select s.s# ,s.sname,count(C#),sum(sc.score) from student as s
Join sc
On s.s#=sc.s#
Group by s.s#,s.sname
查詢選修“葉平”老師所授課程的學生中惰瓜,成績最高的學生姓名及其成績
Select s.sname,sum(sc.socre) from student as s
Join sc
On s.s#=sc.s#
Join course as co
On sc.c#=co.c#
Join teacher as te
On co.t#=te.t#
Where te.tname=’葉平’
2.3.33 第二題
第一題中的教師表中哪個字段可以建立唯一索引?寫出建立唯一索引的語句
Alter table teacher add unique key idx(t#);
2.3.34 第三題
如何檢查第一題中學生表在數(shù)據(jù)庫中所占的空間大小
Select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables
Where table_name=’student’;
如何將第一題中的 4 個表進行備份汉矿,數(shù)據(jù)庫用戶崎坊、密碼為:admin/admin 數(shù)據(jù)庫名為:dbschool
SELECT CONCAT("mysqldump -uroot -p123 ",table_schema,"
",table_name," >/tmp/",table_schema,"_",table_name,".sql" )
FROM information_schema.tables
WHERE table_schema NOT IN('information_schema','performance_schema','sys')
INTO OUTFILE '/tmp/bak.sh' ;
2.3.35 部門表:t_dept (deptid ,deptname )工資表:t_salary (id,employeeid,deptid,salary )要求:
于 查出員工的平均工資大于 3000 的部門名稱
Select td.deptname,avg(ts.salary) from t_dept as td join t_salary as ts
On td.deptid=ts.deptid
Group by td.deptname
Having avg(ts.salary)>3000;
2.3.36 student 表(Sno ,Sname 洲拇,Sage 奈揍,Ssex )Course 表(Cno ,Cname 赋续,Ccredit )SC 表(Sno男翰, ,
Cno,grade )
建表 student纽乱、course蛾绎、SC(略)
查詢年齡小于 20 的學生學號、年齡鸦列,并顯示
Select s.sno,s.sage from student as s where s.sgae<20
查詢年齡不在 20-23(包括 20,23)的學生的成績
Select s.sname,s.sage,sc.score from student as s
Join sc
On s.sno=sc.sno
Where s.sage<20
Union all
Select s.sname,s.sage,sc.score from student as s
Join sc
On s.sno=sc.sno
Where s.sage>23
2.3.37 給出查詢表 A (ID,Name )中存在 ID 重復三次以上的記錄的 SQL 語句
Select id ,count(id) from a group by id having count(id)>3;
2.3.38 mysql 用戶名:root 租冠,密碼:123456 ,socket :/opt/mysql3306/mysql3306.sock 薯嗤,跑默認端口顽爹,
源 請使用一條命令更新該數(shù)據(jù)源 neutron 庫中的 ipallocations 表中的 ip_address 字段等于
10.4.182.36 的記錄為 202.113.14.92
mysql –uroot –p123456 –S /opt/mysql3306/mysql3306.sock –e “update neutron. Ipallocations set
ip_address=’ 202.113.14.92’ where ip_address=’ 10.4.182.36’”;
2.3.39 寫出以下 SQL 語句(涉及到表名和字段自定義)
查詢某一個表前 20 條記錄
Delete from t where id<21;
某公司從下個月起骆姐,每個人工資在原有基礎上上漲 10%
Update t set salary=salary+salary*.01 where date=date_format(now(),%m)+1;
刪除某個表中日期為 2017-01-01 以前的數(shù)據(jù)
Delete from t where date<’ 2017-01-01’;
新增一條記錄
Insert into t values(xxx)
備份數(shù)據(jù)庫
Mysqldump –uroot –pxxx –A –master-data=2 –single-transaction –R –E –triggers >/bak.sql
2.3.40 有三張表分別為客戶表 customers 话原,賬戶表 accounts ,用戶表 users
客戶表 customers (cust_id,cust_name,cust_opendate())
賬戶表 accounts(acc_id,acc_name,cust_id,acc_opendate(賬戶開通時間))
用戶表 users(user_id,user_name,cust_id,lost_login_date(用戶最后登錄時間))
每個客戶可以開通多個帳號诲锹,每個客戶有多個用戶繁仁,cust_id,acc_id,user_id 分別為客戶、賬戶归园、用戶
的唯一標志黄虱,cust_opendate,acc_opendate,lost_login_date 類型為 date 按照要求用一條 sql 語句完成
統(tǒng)計每個月開通的客戶數(shù)
Select date_format(a. acc_opendate,%m),count(c. cust_id)
From customers as c join accounts as a
On c. cust_id=a. cust_id
Group by date_format(a. acc_opendate,%m)
列出上個月開通客戶列表,并輸出這些客戶所具有的賬戶和用戶數(shù)量
Select a.acc_name,count(u. user_id) from accounts as a
Join users as u
On a. cust_id=u. cust_id
Where date_format(a. acc_opendate,%m) = date_format(now(),%m)-1;
統(tǒng)計三個月內(nèi)登錄過的客戶數(shù)量
Select lost_login_date庸诱,count(user_id) from users
Where date_format (lost_login_date,%m) in (date_format(now(),%m),date_format(now(),%m)-1,
date_format(now(),%m)-2)
統(tǒng)計老客戶今年開通賬戶的數(shù)量捻浦,老客戶是指今年以前開通的賬戶
Select cust_opendate,count(cust_id) from customers
Where date_format (cust_opendate,%y)> date_format (now(),%y)
2.3.41 SQL
表名 user
Name Tel Content Date
張三 13333663366 大專畢業(yè) 2006-10-11
張三 13612312331 本科畢業(yè) 2006-10-15
張四 021-55665566 中專畢業(yè) 2006-10-15
(a) 有一新記錄(小王 13254748547 高中畢業(yè) 2007-05-06)請用 SQL 語句新增至表中
Insert into user values(‘小王’,’ 13254748547’,’ 高中畢業(yè)’,’ 2007-05-06’)
(b) 請用 sql 語句把張三的時間更新成為當前系統(tǒng)時間
Update user set date=now() where name=’張三’;
(c) 請寫出刪除名為張四的全部記錄
Delete from user where name=’張四’
2.3.42 創(chuàng)建一個用戶并賦 創(chuàng)建一個用戶并賦 予權限
Grant all on . to root@’10.0.0.%’ indentified by ‘123’;
2.3.43 創(chuàng)建表空間 neuspace, 數(shù)據(jù)文件命名為 neudata.dbf, 存放在 d:\data 目錄下桥爽,文件大小為
200MB 朱灿,設為自動增長,增量 5MB 钠四,文件最大為 500MB
Create tablespace neuspace datafile ‘d:\data\neudata.dbf’ size 200MB AUTOEXTEND ON NEXT 5M
MAXSIZE 500M;
2.3.44 以系統(tǒng)管理員身份登錄盗扒,創(chuàng)建賬號 tom 跪楞,設置 tom 的默認表空間為 neuspace.為 為 tom 分配
connect 和 和 resource 系統(tǒng)角色,獲取基本的系統(tǒng)權限侣灶。然后為 tom 分配對用戶 scott 的表 emp
的 的 select 權限和對 SALARY 甸祭,MGR 屬性的 update 權限
Create user tom identified by tom default tablespace account;
grant connect, resource to tom;
grant select on scott.emp to tom
grant update on SALARY.MGR to tom
2.3.45 按如下要求創(chuàng)建 class
屬性 類型(長度) 默認值 約束 含義
CLASSNO 數(shù)值(2) 無 主鍵 班級編號
CNAME 變長字符(10)無 非空 班級名稱
Create table class(classno int(2) not null primary key auto_increment comment ‘班級編號’,
CNAME varchar(10) not null comment ‘班級名稱’)
2.3.46 學生表有四個字段:學號、姓名褥影、年級池户、學分,統(tǒng)計出按年級降序同名同姓的數(shù)據(jù)情況(寫 學生表有四個字段:學號凡怎、姓名校焦、年級、學分统倒,統(tǒng)計出按年級降序同名同姓的數(shù)據(jù)情況(寫
出 出 sql 語句)
Select name ,count(name) from user group by name order by class desc ;
2.3.47 在表 class 的 的 CNAME 屬性上創(chuàng)建索引 class_sname_idx
Alter table class add index class_sname_idx(CNAME);
2.3.48 sql 類
學生信息表
姓名(Name) 學號(Code)
張三 001
李四 002
馬五 003
甲六 004
考試信息表
學號 學科 成績
001 數(shù)學 80
002 數(shù)學 75
001 語文 90
002 語文 80
001 英語 90
002 英語 85
003 英語 80
004 英語 70
查詢各科成績的平均分寨典,顯示欄位為學科、平均分檐薯,sql 怎么寫
Select a.學科凝赛,avg(b.成績) from student as a join course b on a.id=b.code group by a.學科;
查詢所有學生各科成績,顯示欄位為姓名坛缕、學號墓猎、學科、成績赚楚,并以學號與學科排序毙沾,沒有成績的
學生也需要列出,sql 怎么編寫
Select a.name,a.code,b.學科,b.成績 from student as a join course as b on a.code=b.id order by a.學號,b.學
科
查詢出單科成績最高的宠页,顯示欄位為:姓名左胞、學號、學科举户、成績烤宙,sql 怎么編寫
Select a.name,a.code,b.id,b. 學科,max(b.成績) from from student as a join course as b on a.code=b.id
Group by b. 學科
列出每位學生各科成績,要求輸出格式:姓名俭嘁、學號躺枕、語文成績、數(shù)學成績供填、英語成績拐云,sql 怎么寫
Select a.name,a.code,b.id,
Case when b.學科=’ 語文’ then b.成績 end as ‘語文成績’,
Case when b.學科=’ 數(shù)學’ then b.成績 end as ‘數(shù)學成績’,
Case when b.學科=’ 英語’ then b.成績 end as ‘英語成績’,
from student as a join course as b on a.code=b.id
Group by 姓名,學號;
2.3.49 假如有 A****和 和 B****兩 兩 個表,A**** 表中包括 ID**** 近她,COL1**** 叉瘩,COL2****, 粘捎,
COL3**** 等欄位薇缅,B**** 表中包括 ID**** 危彩,COL1**** ,COL2**** 捅暴,COL4****恬砂, 咧纠,
COL5**** 等欄位蓬痒,現(xiàn)需要把 B**** 中的 CLO1**** ,COL2**** 內(nèi)容更新到 A****表 表
COL1**** 漆羔,COL2**** 中梧奢,ID**** 為關鍵字段,要求只寫一個 SQL
2.3.50 不借助第三方工具演痒,如何獲得 SQL 的執(zhí)行計劃
第 第3 章 MySQL 索引
3.1 選擇
3.1.1 在 在 SQL 數(shù)據(jù)庫一個班級表里只記錄了 100 位同學的情況亲轨,那么對該表建立索引文件的描述正
確的是( 不適宜,因為對少林記錄的表進行索引實際上會產(chǎn)生不利的影響)
一定要鸟顺,因為索引有助于加快搜索記錄的進程
不適宜惦蚊,因為對少林記錄的表進行索引實際上會產(chǎn)生不利的影響
一定要,因為索引對于任何數(shù)據(jù)庫表都是必要的
沒有必要讯嫂,因為建立索引對任何數(shù)據(jù)庫的性能都沒有影響
3.2 簡答
3.2.1 索引的好處和壞處是什么蹦锋?
好處.在適合的索引下,查詢快.
壞處.索引需要成本去維護.
3.2.2 數(shù)據(jù)庫中,哪些列需要創(chuàng)建索引欧芽,哪些列不適合創(chuàng)建索引
主鍵索引莉掂,唯一列,聯(lián)合列等千扔,
3.2.3 Mysql 列出數(shù)據(jù)庫use 切換當前用戶連接的數(shù)據(jù)庫_ 庫名____
3.2.4 請問以下一些查詢語句是否用到該索引? 對 對 last_name 與 與 first_name 做索引
SELECT * FROM customer_master WHERE first_name = 'Ed';
SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE '%rane' AND first_name = 'Ed';
SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';
SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY
first_name,last_name;
SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';
3.2.5 說說你對索引的認識(結(jié)構(gòu)、對 dml 的影響胀溺、為什么提高查詢性能)
索引有 B-TREE介杆、BIT、CLUSTER 等類型龙誊。ORACLE 使用了一個復雜的自平衡 B-tree 結(jié)構(gòu);通常來
說抚垃,在表上建立恰當?shù)乃饕樵儠r會改進查詢性能载迄。但在進行插入讯柔、刪除、修改時护昧,同時會進行
索引的修改魂迄,在性能上有一定的影響。有索引且查詢條件能使用索引時惋耙,數(shù)據(jù)庫會先度取索引捣炬,根
據(jù)索引內(nèi)容和查詢條件熊昌,查詢出 ROWID,再根據(jù) ROWID 取出需要的數(shù)據(jù)湿酸。由于索引內(nèi)容通常比全
表內(nèi)容要少很多婿屹,因此通過先讀索引,能減少 I/O推溃,提高查詢性能昂利。
b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高 select/update/delete
的性能,會降低 insert 的速度,
第 第4 章 MySQL 優(yōu)化
4.1 選擇
4.1.1 順序表(2,6,8,10,12,15,16,18,24,28,32 )中,用二分法查找關鍵碼值铁坎,所需的關鍵詞比較次數(shù)為
( (C )
A. 3 B. 4 C.5 D. 6
4.1.2 從二叉樹的任一結(jié)點出發(fā)到根的路徑上蜂奸,所經(jīng)過的結(jié)點序列必按其關鎮(zhèn)字降仔指列。(C )
A 二叉排序樹 B.大頂堆 C 小頂堆 D.平衡二叉樹
4.2 填空
4.2.1 在總計函數(shù)中硬萍,傳回非 NULL 值的字段數(shù)目的函數(shù)名稱是COUNT()
4.3 簡答
4.3.1 若果一個 sql 查詢語句很長扩所,執(zhí)行速度慢,你會想到哪些優(yōu)化的方法朴乖?
查詢不需要的記錄祖屏,使用 limit 解決;
多表關聯(lián)返回全部列买羞,指定 A.id, A.name, B.age袁勺;
總是取出全部列,SELECT * 會讓優(yōu)化器無法完成索引覆蓋掃描的優(yōu)化哩都。
優(yōu)化 count() 查詢
優(yōu)化關聯(lián)查詢
優(yōu)化子查詢(即嵌套查詢)
優(yōu)化 GROUP BY 和 DISTINCT
優(yōu)化 LIMIT 分頁
優(yōu)化 UNION 查詢
4.3.2 數(shù)據(jù)庫里有些數(shù)據(jù)會反復被查詢魁兼,問有什么好方法提高效率?
建立索引
分區(qū)(如 MySQL漠嵌,按時間分區(qū))
盡量使用固定長度字段和限制字段長度(如 varchar(10))
增加緩沖區(qū)
如果設計表的級聯(lián)咐汞,不同的表存儲在不同磁盤上,以增加 I/O 速度
優(yōu)化 sql 語句儒鹿,減少比較次數(shù)
限制返回條目數(shù)(mysql 中使用 limit)
4.3.3 系統(tǒng)中化撕,主要的業(yè)務表。按月進行分表约炎。7,8,9 月表分別為 tab_201707 植阴、tab_201708、 圾浅、
tab_201709 這三個表里掠手。表結(jié)構(gòu)如下:
SQL> desc tab_201707;
Name Type Nullable Default Comments
ID NUMBER 自增
CID NUMBER Y 批次 ID
CODE VARCHER2(20) Y 特服號
CORPORATEID NUMBER 企業(yè) ID
USERID NUMBER Y 用戶 ID
請寫出 SQL 語句,統(tǒng)計 7狸捕、8喷鸽、9 三個月,每個 USERID 的記錄總數(shù)
4.3.4 什么是跨站腳本攻擊灸拍,有何危害做祝,sq| 注入攻擊如何防范
XSS 跨站腳本攻擊:兩種情況砾省。一種通過外部輸入然后直接在瀏覽器端觸發(fā),即反射型 XSS混槐;還有
一種則是先把利用代碼保存在數(shù)據(jù)庫或文件中编兄,當 web 程序讀取利用代碼并輸出在頁面上時觸發(fā)漏
洞,即存儲型 XSS声登。DOM 型 XSS 是一種特殊的反射型 XSS狠鸳。
跨站點腳本(XSS)允許攻擊者通過利用因特網(wǎng)服務器的漏洞來發(fā)送惡意代碼到其他用戶。攻擊者
利用跨站點腳本(XSS)攻擊向那些看似可信任的鏈接中注入惡意代碼捌刮。當用戶點擊了鏈接后碰煌,內(nèi)
嵌的程序?qū)⒈惶峤徊⑶視谟脩舻碾娔X上執(zhí)行舒岸,這會使黑客獲取绅作。
危害:前端頁面能做的事它都能做。(不僅僅盜取 cookie蛾派、修改頁面等)
漏洞防范
(1) 特殊字符 HTML 實體轉(zhuǎn)碼俄认。最好的過濾方式是在輸出和二次調(diào)用的時候進行加 HTML 實體
一類的轉(zhuǎn)碼,防止腳本注入洪乍。
(2) 標簽事件屬性黑名單眯杏。特殊字符容易被繞過,所以還得加標簽事件得黑名單或者白
名單壳澳,這里推薦使用白名單的方式岂贩,實現(xiàn)規(guī)則可以直接使用正則表達式來匹配萎津,如果匹配到的事件
不在白名單列表,就可以直接攔截,而不是過濾為空豌研。
4.3.5 在工作中晶衷,一臺線上 MSSQL 數(shù)據(jù)庫查詢數(shù)據(jù)突然變得異常緩慢锹漱,如果交給你排查,請寫出排
查思路
首先應該從系統(tǒng)級別來排查崎脉。先找出到底哪里慢蝎抽,是特定操作慢呢,還是所有操作都慢了杜跷。
既然是突然變慢,那么就是說之前還是比較快的更卒。自從某個特殊事件發(fā)生后辨萍,慢了下來。特殊事件
一般包括:
1土陪、程序做了修改励烦。
2、突然有大數(shù)據(jù)量的系統(tǒng)訪問骗绕。
3藐窄、某些不常用功能突然啟用,或大量訪問酬土。
4荆忍、某些硬件出了功能性問題。
對于系統(tǒng)整體變慢,基本上還是先查系統(tǒng)日志刹枉。查最近的系統(tǒng)更新日志叽唱。查看磁盤剩余容量。硬件
是否由異常微宝。
4.3.6 SQL 語句調(diào)優(yōu)
select v_id,v_owner,v_uesr,v_options,v_date,v_anonymous from t_vote_hash_by_id_65 where v_id='536'
and v_user='yu281590760' and v_owner='xiwangkuaile222';
4.3.7 列出您認為 sql 優(yōu)化可以從哪些方面進行
1棺亭、sql 語句的執(zhí)行計劃是否正常。
2蟋软、減少應用和數(shù)據(jù)庫的交互次數(shù)镶摘、同一個 sql 語句的執(zhí)行次數(shù)。
3岳守、數(shù)據(jù)庫實體的碎片的整理(特別是對某些表經(jīng)常進行 insert 和 delete 動作凄敢,尤其注意,索引字段
為系列字段湿痢、自增長字段涝缝、時間字段,對于業(yè)務比較頻繁的系統(tǒng)譬重,最好一個月重建一次)拒逮。 4、減
少表之間的關聯(lián)臀规,特別對于批量數(shù)據(jù)處理滩援,盡量單表查詢數(shù)據(jù),統(tǒng)一在內(nèi)存中進行邏輯處理以现,減少
數(shù)據(jù)庫壓力(java 處理批量數(shù)據(jù)不可取狠怨,盡量用 c 或者 c++ 進行處理,效率大大提升)邑遏。
5、對訪問頻繁的數(shù)據(jù)恰矩,充分利用數(shù)據(jù)庫 cache 和應用的緩存记盒。
6、數(shù)據(jù)量比較大的外傅,在設計過程中纪吮,為了減少其他表的關聯(lián),增加一些冗余字段萎胰,提高查詢性能碾盟。
4.3.8 某個系統(tǒng) sql 忽然變慢,影響了系統(tǒng)的性能技竟,但通過 sqlplus 或者 PL/SQL developer 運行改
sql 冰肴,速度卻很快,請問產(chǎn)生此情況的可能原因,并簡述解決辦法
listener.log 過大導致
第 第5 章 MySQL 集群
5.1 選擇
5.1.1 下面對 Linux 下 下 mysqldump 備份命令及參數(shù)描述正確的是(mysqldump -h ip -u -p
DBNAME>back.sql )
mysqldump -h ip -u -p DBNAME>back.sql mysqldump -P ip -h DBNAME>back.sql
mysqldump -u ip -P DBNAME>back.sql mysqldump -h ip -u DBNAME>back.sql
5.1.2 如何將 MySQL 數(shù)據(jù)庫中的 mail 這個數(shù)據(jù)庫備份成 mail.sql?(B)
A熙尉、mysql -opt mail uroot-p > mail sql B联逻、mysqldump --opt mail -uroot p > mail.sql
C、mysql -uroot -p > mail.sql D.mysql -uroot -p < mail sql
1.5.1.3 MySQL 主從結(jié)構(gòu)的主數(shù)據(jù)庫中不可能出現(xiàn)以下哪種日志____中繼日志____
錯誤日志 事務日志 中繼日志 redo log
5.1.3 對于數(shù)據(jù)庫備份正確的做法是:( 停止數(shù)據(jù)庫開始備份)
停止業(yè)務開始備份 停止數(shù)據(jù)庫開始備份 不需要停止備份 根據(jù)情況而定
5.2 填空
5.2.1 如何用 mysql 命令進行備份和恢復检痰?以 Lest 庫為例包归,創(chuàng)建一個備份,并再用此備份進行恢復
mysqldump -uroot -p123456 –B Lest > lest.sql
source /backup/lest.sql
5.2.2 Mysql 備份工具mysqldump__xtrabackup
5.3 簡答
5.3.1 每天凌晨 2 點對 mfdata 數(shù)據(jù)庫進行備份铅歼,備份到/data/mysql/ 下公壤,并以時間為備份名。
Mysqldump –uroot –p123 –B mfdata >/data/mysql/mfdata_ $(date +%F).sql
5.3.2 mysql 備份命令
本地備份 mysqldump -uroot -p -S /tmp/mysql.sock
遠程備份 mysqldump -uroot -p -h 10.0.0.51 -P3306
5.3.3 說明一下 mysql 主從復制原理并描述一下部署主從復制的步驟
1.change master to 時椎椰,ip pot user password binlog position 寫入到 master.info 進行記錄
- start slave 時厦幅,從庫會啟動 IO 線程和 SQL 線程
3.IO_T,讀取 master.info 信息俭识,獲取主庫信息連接主庫 - 主庫會生成一個準備 binlog DUMP 線程慨削,來響應從庫
- IO_T 根據(jù) master.info 記錄的 binlog 文件名和 position 號,請求主庫 DUMP 最新日志
- DUMP 線程檢查主庫的 binlog 日志套媚,如果有新的缚态,TP(傳送)給從從庫的 IO_T
- IO_T 將收到的日志存儲到了 TCP/IP 緩存,立即返回 ACK 給主庫 堤瘤,主庫工作完成
8.IO_T 將緩存中的數(shù)據(jù)玫芦,存儲到 relay-log 日志文件,更新 master.info 文件 binlog 文件名和 postion,
IO_T 工作完成
9.SQL_T 讀取 relay-log.info 文件本辐,獲取到上次執(zhí)行到的 relay-log 的位置桥帆,作為起點,回放 relay-log
10.SQL_T 回放完成之后慎皱,會更新 relay-log.info 文件老虫。 - relay-log 會有自動清理的功能。
5.3.4 備份 Mysql 的所有數(shù)據(jù)庫茫多。
mysqldump -u username -p -all-databases > BackupName.sql
5.3.5 對 對 mysql 數(shù)據(jù)庫 test 進行備份和恢復
mysqldump -uroot -p123456 -P3306 test -t > 0106.sql
create database test
source /backup/0106.sql
5.3.6 如何備份某個庫祈匙,某個庫下的某個表,某個庫排除某個表
mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql
dbname 參數(shù)表示數(shù)據(jù)庫的名稱天揖;
table1 和 table2 參數(shù)表示需要備份的表的名稱夺欲,為空則整個數(shù)據(jù)庫備份;
BackupName.sql 參數(shù)表設計備份文件的名稱今膊,文件名前面可以加上一個絕對路徑些阅。通常將數(shù)據(jù)庫被
分成一個后綴名為 sql 的文件;
--ignore-table 選項 mysqldump 備份數(shù)據(jù)庫時忽略某個表
5.3.7 如何恢復備份的數(shù)據(jù)斑唬,過程市埋,注意事項黎泣?
1 mysql -u root -p [dbname] < backup.sq
2 還原直接復制目錄的備份 通過這種方式還原時,必須保證兩個 MySQL 數(shù)據(jù)庫的版本號是相同
的腰素。MyISAM 類型的表有效聘裁,對于 InnoDB 類型的表不可用,InnoDB 表的表空間不能直接復制弓千。
5.3.8 主從概念衡便,如何配置,管理 主從概念洋访,如何配置镣陕,管理 ,監(jiān)控姻政,有確定呆抑。主從如何同步的?
1.change master to 時汁展,ip pot user password binlog position 寫入到 master.info 進行記錄
- start slave 時鹊碍,從庫會啟動 IO 線程和 SQL 線程
3.IO_T,讀取 master.info 信息食绿,獲取主庫信息連接主庫 - 主庫會生成一個準備 binlog DUMP 線程侈咕,來響應從庫
- IO_T 根據(jù) master.info 記錄的 binlog 文件名和 position 號,請求主庫 DUMP 最新日志
- DUMP 線程檢查主庫的 binlog 日志器紧,如果有新的耀销,TP(傳送)給從從庫的 IO_T
- IO_T 將收到的日志存儲到了 TCP/IP 緩存,立即返回 ACK 給主庫 铲汪,主庫工作完成
8.IO_T 將緩存中的數(shù)據(jù)熊尉,存儲到 relay-log 日志文件,更新 master.info 文件 binlog 文件名和 postion,
IO_T 工作完成
9.SQL_T 讀取 relay-log.info 文件掌腰,獲取到上次執(zhí)行到的 relay-log 的位置狰住,作為起點,回放 relay-log
10.SQL_T 回放完成之后齿梁,會更新 relay-log.info 文件转晰。 - relay-log 會有自動清理的功能。
監(jiān)控
1)監(jiān)控 MYSQL 的運行狀態(tài)士飒;
2)Slave 機器的 IO 和 SQL 狀態(tài)都必須為 YES,缺一不可蔗崎;
5.3.9 msyql 備份命令酵幕?mysql 如何給 jfedu 用戶對所有表授權訪問,密碼為 jfedu.net
mysql 備份 mysqldump -h localhost -u root -p jacken > /data/jacken.db
授權:mysql> grant all privileges on . to jfedu@localhost identified by "jfedu.net";
5.3.10 如何判斷 mysql 主從是否同步? 該如何使其同步?
mysql> show slave status\G #查看是否都為 yes
Slave_IO_Running
Slave_SQL_Running
5.3.11 mysql 的 的 innodb 如何定位鎖問題缓苛,mysql 如何減少主從復制延遲
鎖監(jiān)控設計到的命令:
show status like 'innodb_rows_lock%'
select * from information_schema.innodb_trx;
select * from sys.innodb_lock_waits;
select * from performance_schema.threads;
select * from performance_schema.events_statements_current;
select * from performance_schema.events_statements_history;
1 主庫寫 binlog 不及時 *******
控制 binlog 從內(nèi)存寫入磁盤的控制開關
每次事務提交都立即刷新 binlog 到磁盤(雙一標準中的其一)
sync_binlog=1
每次事務提交不立即寫入磁盤,靠操作系統(tǒng)判斷什么時候?qū)懭?br>
sync_binlog=0
說明:5.6 默認是 0芳撒,5.7 以后默認是 1
2 dump 線程多導致的邓深,系統(tǒng)資源壓力大,由于傳送日志是串行的笔刹。
從庫越多,壓力越大
由于超大事務存在芥备,由于是串行工作,會阻塞后續(xù)其他事務的傳送舌菜。
解決方案:
減少大事務
group commit (需要配合 GTID 來實現(xiàn)的)
3 從庫-IO 線程阻塞
大事務拆成小事務
事務量大(主庫壓力大)
group commit 可以緩解
業(yè)務的分離和分布式(Mycat,InnoDB Cluster)
4 SQL 線程慢(Classic replication 傳統(tǒng)) *****
原因:
從庫 默認只有一個 SQL 線程,串行回放事務萌壳。在主庫有并發(fā)事務量大,或者有超大事務時日月,都會導
致 SQL 延時較嚴重袱瓮。
如何解決:
5.6 版本,加入了 GTID 特性爱咬,所以支持了并發(fā) SQL 特性尺借,基于不同庫實現(xiàn)并行回放事務
5.7 版本,GTID 功能進行了升級精拟,可以通過 Logical_clock 模式燎斩,實現(xiàn)事務級別的多 SQL 線程的回
放。我們把這種復制模式叫做 MTS蜂绎。
寫出對 MySQL 數(shù)據(jù)庫 test 進行備份和恢復的命令
mysqldump -uroot -p123456 -P3306 test -t > 0106.sql
create database test
source /backup/0106.sql
5.3.12 Mysql 的 的 binlog 格式有哪些栅表,默認的是什么格式,格式選取的標準是什么
binlog 有三種格式:Statement荡碾、Row 以及 Mixed谨读。
–基于 SQL 語句的復制(statement-based replication,SBR),
–基于行的復制(row-based replication,RBR)坛吁,
–混合模式復制(mixed-based replication,MBR)劳殖。
1、STATEMENT 模式(SBR)
每一條會修改數(shù)據(jù)的 sql 語句會記錄到 binlog 中拨脉。優(yōu)點是并不需要記錄每一條 sql 語句和每一行的數(shù)
據(jù)變化哆姻,減少了 binlog 日志量,節(jié)約 IO玫膀,提高性能矛缨。缺點是在某些情況下會導致 master-slave 中的
數(shù)據(jù)不一致(如 sleep()函數(shù), last_insert_id()帖旨,以及 user-defined functions(udf)等會出現(xiàn)問題)
2箕昭、ROW 模式(RBR)
不記錄每條 sql 語句的上下文信息,僅需記錄哪條數(shù)據(jù)被修改了解阅,修改成什么樣了落竹。而且不會出現(xiàn)
某些特定情況下的存儲過程、或 function货抄、或 trigger 的調(diào)用和觸發(fā)無法被正確復制的問題述召。缺點是
會產(chǎn)生大量的日志朱转,尤其是 alter table 的時候會讓日志暴漲。
3积暖、 MIXED 模式(MBR)
以上兩種模式的混合使用藤为,一般的復制使用 STATEMENT 模式保存 binlog,對于 STATEMENT 模式
無法復制的操作使用 ROW 模式保存 binlog夺刑,MySQL 會根據(jù)執(zhí)行的 SQL 語句選擇日志保存方式缅疟。
5.3.13 Mysql 主從是否同步,要在主庫上查看還是從庫上查看性誉,主要關注哪些參數(shù)
從庫上查看
show slave status\G #查看是否都為 yes
Slave_IO_Running
Slave_SQL_Running
5.3.14 說明一下目前線上 mysql 集群 的部署方案
MHA+atlas
Mycat+MGR
InnoDB cluster
PXC
MGC
5.3.15 用哪個命令可以對 Mysql 中的數(shù)據(jù)庫進行備份窿吩?
mysqldump
mysqldump -u 用戶名 -p 密碼 --databases 數(shù)據(jù)庫 1 數(shù)據(jù)庫 2 > xxx.sql
常見選項:
-u: 用戶名
-p: 密碼
-P: 端口號,不寫默認 3306
--all-databases, -A:備份所有數(shù)據(jù)庫
--databases, -B: 用于備份多個數(shù)據(jù)庫错览,如果沒有該選項纫雁,mysqldump 把第一個名字參數(shù)作為數(shù)據(jù)庫
名,后面的作為表名倾哺。使用該選項轧邪,mysqldum 把每個名字都當作為數(shù)據(jù)庫名。
-d: 只導出數(shù)據(jù)庫的表結(jié)構(gòu)
-t: 只導出數(shù)據(jù)庫的數(shù)據(jù)
--quick, -q:快速導出
--xml, -X:導出為 xml 文件
5.3.16 mysql 的 的 binlog 有幾種羞海,區(qū)別是什么忌愚?mysql 雙主復制原理是什么?有什么優(yōu)點和缺點却邓?
mysql 如何進行增量備份硕糊?
binlog 的格式也有三種:STATEMENT、ROW腊徙、MIXED 简十。
1、STATMENT 模式:基于 SQL 語句的復制(statement-based replication, SBR)撬腾,每一條會修改數(shù)據(jù)的
sql 語句會記錄到 binlog 中螟蝙。
2、基于行的復制(row-based replication, RBR):不記錄每一條 SQL 語句的上下文信息民傻,僅需記錄哪
條數(shù)據(jù)被修改了胰默,修改成了什么樣子了。
3漓踢、混合模式復制(mixed-based replication, MBR):以上兩種模式的混合使用牵署,一般的復制使用
STATEMENT 模式保存 binlog,對于 STATEMENT 模式無法復制的操作使用 ROW 模式保存
binlog喧半,MySQL 會根據(jù)執(zhí)行的 SQL 語句選擇日志保存方式碟刺。
雙主原理:
雙向的主從復制,也就是互為對方的從服務器薯酝,每臺服務器即是對方的主服務器半沽,又是對方的從服
務器
數(shù)據(jù)庫復制 replication 的實現(xiàn)原理
1:主服務器凡運行語句,都產(chǎn)生一個二進制日志 binlog
2:從服務器不斷讀取主服務器的 binlog
3:從主服務讀取到的 binlog,轉(zhuǎn)換為自身可執(zhí)行的 relaylog,
4:執(zhí)行 relaylog
5.3.17 簡述數(shù)據(jù)庫中全量備份、差異備份吴菠、事務日志備份的恢復方式
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
mysqlbinlog -d test mysql-bin.000003 >003bin.sql
5.3.18 如果需要可以回滾的修改以下 sql 語句者填,如何實現(xiàn)?
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke
joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t"
o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="圖片_x0020_10"
o:spid="_x0000_i1025" type="#_x0000_t75" style="width:6in;height:195pt;visibility:visible;mso-wrap-
style:square"><v:imagedata
src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"
o:title=""></v:imagedata></v:shape>
5.3.19 SAN 方式高可用,你對這方面有了解嗎做葵?
SAN(Storage Area Network)簡單點說就是可以實現(xiàn)網(wǎng)絡中不同服務器的數(shù)據(jù)共享占哟,
共享存儲能夠為數(shù)據(jù)庫服務器和存儲解耦。使用共享存儲時酿矢,服務器能夠正常掛載文件系統(tǒng)并操
作榨乎,
如果服務器掛了,備用服務器可以掛載相同的文件系統(tǒng)瘫筐,執(zhí)行需要的恢復操作蜜暑,然后啟動 MySQL
5.3.20 mysqldump 實現(xiàn)不鎖表的參數(shù)
mysqldump 備份不鎖表:加上--lock-tables=false 參數(shù),
如果是 innodb策肝,則加上--single-transcation 比較好肛捍。
5.3.21 MySQL 數(shù)據(jù)庫的備份命令
Mysqldump innobackupex
5.3.22 MySQL 的同步、半同步之众、一步同步主從復制有什么區(qū)別
異步復制
異步復制拙毫,主庫將事務 Binlog 事件寫入到 Binlog 文件中,此時主庫只會通知一下 Dump 線程發(fā)
送這些新的 Binlog棺禾,然后主庫就會繼續(xù)處理提交操作缀蹄,而此時不會保證這些 Binlog 傳到任何一個
從庫節(jié)點上。
全同步復制
全同步復制膘婶,當主庫提交事務之后缺前,所有的從庫節(jié)點必須收到、APPLY 并且提交這些事務竣付,然后主
庫線程才能繼續(xù)做后續(xù)操作诡延。但缺點是,主庫完成一個事務的時間會被拉長古胆,性能降低肆良。
半同步復制
半同步復制,是介于全同步復制與全異步復制之間的一種逸绎,主庫只需要等待至少一個從庫節(jié)點收到
并且 Flush Binlog 到 Relay Log 文件即可惹恃,主庫不需要等待所有從庫給主庫反饋。同時棺牧,這里只是
一個收到的反饋巫糙,而不是已經(jīng)完全完成并且提交的反饋,如此颊乘,節(jié)省了很多時間参淹。
5.3.23 對于一個數(shù)據(jù)量較多的系統(tǒng)(數(shù)據(jù)庫 10T 醉锄,每天歸檔 500g ),您如何設計備份策略
每周 Full浙值,每天 inc恳不,或使用 DG、OGG
5.3.24 對于 exp/imp 和 和 impdb/expdp 邏輯備份的時候开呐,有什么方法提高效率
expdp/impdp 是服務端程序烟勋,影響它速度的只有磁盤 IO。
exp/imp 可以在服務端筐付,也可以在客戶端卵惦。所以,它受限于網(wǎng)絡和磁盤
采用 direct path 可以提高導出速度瓦戚。 所以沮尿,在使用 exp 時,就可以采用直接路徑模式伤极。 這種模式有 2 個相關的參數(shù):
DIRECT 和 RECORDLENGTH 參數(shù)蛹找。
DIRECT 參數(shù)定義了導出是使用直接路徑方式(DIRECT=Y),還是常規(guī)路徑方式(DIRECT=N)哨坪。常規(guī)路徑導出使用 SQL SELECT
語句從表中抽取數(shù)據(jù)庸疾,直接路徑導出則是將數(shù)據(jù)直接從磁盤讀到 PGA 再原樣寫入導出文件,從而避免了 SQL 命令處理層的數(shù)
據(jù)轉(zhuǎn)換過程当编,大大提高了導出效率届慈。在數(shù)據(jù)量大的情況下,直接路徑導出的效率優(yōu)勢更為明顯忿偷,可比常規(guī)方法速度提高三倍之
多金顿。
和 DIRECT=Y 配合使用的是 RECORDLENGTH 參數(shù),它定義了 Export I/O 緩沖的大小,作用類似于常規(guī)路徑導出使用的
BUFFER 參數(shù)。建議設置 RECORDLENGTH 參數(shù)為最大 I/O 緩沖芽淡,即 65535(64kb)。其用法如下:
如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
第 第6 章 Oracle
6.1 選擇
6.1.1 如果一個服務器進程非正常終止嫂拴,Orade 系統(tǒng)將使用下列哪一個進程來釋放它所占用的資源?
(D)
A.DBWR B.LGWR C.SMON D.PMON
6.1.2 下例選項中,哪一部分不是 Orade 實例的組成部分?( B)
A.SGA 系統(tǒng)全局區(qū) B.控制文件 C.PMON 后臺進程 D.Dnnn 調(diào)度進程
6.1.3 Oracle 本地解析依賴那個文件
sqlnet.ora listener.ora cman.ora tnsnames.ora
6.1.4 在 在 Oracle 中贮喧,當控制一個顯示游標時筒狠,以下哪個命令包含 into 子句?
Open close fetch cursor
6.1.5 Oracle 中要生成數(shù)據(jù)庫表箱沦,下列哪個選項是無效表生產(chǎn)的語句辩恼?D
create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
create global temporary table temp_cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
create table 51cats as select c_name,c_weight from cats where c_weigth >5
6.1.6 在 在 oracle 中,當控制一個顯示游標時,一下哪個命令包含 into 子句灶伊?
Open close fetch cursor
6.1.7 表中的數(shù)據(jù)可以存為一下那種文件格式(B )
PDF EXE TXT DMP
6.1.8 在全局存儲區(qū) SGA 中疆前,那個部分內(nèi)存區(qū)域是循環(huán)使用的(B )
數(shù)據(jù)緩沖區(qū) 日志緩沖區(qū) 共享池 大池
6.1.9 如果要查詢數(shù)據(jù)庫中所有表的信息,應當使用下列哪種數(shù)據(jù)字典視圖? ( A )
A.DBA 視圖 B.ALL 視圖 C.USER 視圖 D.動態(tài)性能視圖
6.1.10 下列哪一項是 Oracle 數(shù)據(jù)庫中最小的存儲分配單元?( D )
A.表空間 B.段 C.盤區(qū) D.數(shù)據(jù)塊
6.1.11 下面的各選項中哪一一個正確描述了 Oracle 數(shù)據(jù)庫的邏輯存儲結(jié)構(gòu)? (A)
A.表空間由段組成谁帕,段由盤區(qū)組成峡继,盤區(qū)由數(shù)據(jù)塊組成
B.段由表空間組成,表空間由盤區(qū)組成匈挖,盤區(qū)由數(shù)據(jù)塊組成
C.盤區(qū)由數(shù)據(jù)塊組成,數(shù)據(jù)塊由段組成康愤,段由表空間組成
D.數(shù)據(jù)塊由段組成儡循,段由盤區(qū)組成,盤區(qū)由表空間組成
6.1.12 下列哪一個進程用于將修改過的數(shù)據(jù)從內(nèi)存保存到磁盤數(shù)據(jù)文件? (A )
A.DBWR B.LGWR C.RECO D.ARCH
6.1.13 解忙后的 SOL 語句在 SGA 的哪個區(qū)域中進行緩存?( 共享池 )
數(shù)據(jù)緩沖區(qū) 日志緩沖區(qū) 共享池 大池
6.1.14 當數(shù)據(jù)庫運行在歸檔模式下時征冷,如果發(fā)生目志切換择膝,為了保證不覆蓋舊的日志信息系統(tǒng)將啟 當數(shù)據(jù)庫運行在歸檔模式下時,如果發(fā)生目志切換检激,為了保證不覆蓋舊的日志信息系統(tǒng)將啟
動如下哪個進程肴捉? ( D )
A.DBWR B.LGWR C.SMON D.ARCH
6.1.15 PL/SQL 代碼段中注釋 符號是
// \ - ,
6.1.16 (C )模式存儲數(shù)據(jù)庫中數(shù)據(jù)字典的表和視圖
A 、DBA B叔收、SCOTT C齿穗、SYSTEM D、SYS
6.2 填空
6.2.1 從存儲結(jié)構(gòu)的角度來說饺律,Oracle 數(shù)據(jù)庫可分為 — 段區(qū)塊
6.2.2 要更新游標結(jié)果集中的當前行窃页,應使用FOR MODIFY 子句
6.2.3 Oracle 查看表空間情況使用哪個數(shù)據(jù)字典dba_tablespces_v$tablespace _______
6.2.4 Oracle 備份工具(包括導入導出)exp_ _imp__expdp impdp rman
6.2.5 Oracle 下取得當前系統(tǒng)時間的代碼為__select sysdate from dual; ________
6.2.6 PL/SQL 塊中不能直接使用的 SQL 命令是_DDL 命令
6.3 簡答
6.3.1 在 在 ORACLE 中用 SQL 語句備份表 A, 備份表名為 B 。
6.3.2 往 往 oracle 插入數(shù)據(jù)超時复濒,root 用戶下如何排查故障節(jié)點脖卖,描述重新啟動 oracle 服務過程
1、startup nomount
這個階段巧颈,Oracle 進程讀取初始參數(shù)文件畦木,查看 Oracle 數(shù)據(jù)庫的參數(shù)是如何配置的。比如內(nèi)存
大小配置參數(shù)等砸泛。讀取參數(shù)文件后十籍,與數(shù)據(jù)庫相關的內(nèi)存區(qū)域被建立起來,同時晾嘶,后臺進程也已經(jīng)
開始啟動妓雾。我們把這些內(nèi)存和進程叫做 Oracle instance,一旦 Oracle Instance 啟動成功垒迂,數(shù)據(jù)庫就進
入了 NoMount 階段械姻。
2、Mount
啟動到這個階段時,會打開和讀取控制文件楷拳,控制文件是二進制文件绣夺,記錄著 Oracle 的重要
信息,例如欢揖,數(shù)據(jù)文件的路徑等陶耍。
這個階段,Oracle 確定數(shù)據(jù)文件的位置她混,但是還沒有打開這些文件烈钞,一旦數(shù)據(jù)文件的路徑被定
位后,數(shù)據(jù)庫開始進入下一階段坤按。
3毯欣、Open
這個階段,Oracle 會讀取所有的數(shù)據(jù)文件臭脓,并且確定這些數(shù)據(jù)文件是一致的(consistent)酗钞。
6.3.3 Oracle 表空間,單個數(shù)據(jù)文件最大支持存儲多少 G 數(shù)據(jù)来累,索引需要重建嗎砚作,什么時候需要重
建索引
32G
6.3.4 請寫出 unix 系統(tǒng)中 oracle 數(shù)據(jù)庫啟、停命令
啟動:startup
停止:shutdown immediate
6.3.5 請描述 oracle 數(shù)據(jù)庫備份方式
Oracle 備份包括邏輯備份和物理備份嘹锁。
1.邏輯備份 數(shù)據(jù)庫的邏輯備份包含讀一個數(shù)據(jù)庫記錄集和將記錄集寫入文件葫录。
(1)輸出(Export)輸出可以是整個數(shù)據(jù)庫、指定用戶或指定表兼耀。
(2)輸入(Import)輸入將輸出建立的二進制轉(zhuǎn)儲文件讀入并執(zhí)行其命令压昼。
2.物理備份 物理備份包含拷貝構(gòu)成數(shù)據(jù)庫的文件而不管其邏輯內(nèi)容。
Oracle 支持兩種不同類型的物理文件備份:脫機備份(offline backup)和聯(lián)機備份(online
backup)瘤运。
(1) 脫機備份 脫機備份用在當數(shù)據(jù)庫已正常關閉窍霞,數(shù)據(jù)庫處于"offline"時,要備份下列文件
所有數(shù)據(jù)文件 所有控制文件
6.3.6 Oracle 如何實現(xiàn)數(shù)據(jù)庫的優(yōu)化
1拯坟、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設計但金。這一部分在開發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用 ORACLE
數(shù)據(jù)庫的分區(qū)功能郁季,對于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立索引等冷溃。
2、調(diào)整應用程序結(jié)構(gòu)設計梦裂。這一部分也是在開發(fā)信息系統(tǒng)之前完成似枕,程序員在這一步需要考慮應用
程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的 Client/Server 兩層體系結(jié)構(gòu)年柠,還是使用
Browser/Web/Database 的三層體系結(jié)構(gòu)凿歼。不同的應用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫資源是不同的。
3、調(diào)整數(shù)據(jù)庫 SQL 語句答憔。應用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的 SQL 語句執(zhí)行味赃,因此 SQL 語
句的執(zhí)行效率最終決定了 ORACLE 數(shù)據(jù)庫的性能。ORACLE 公司推薦使用 ORACLE 語句優(yōu)化器
(Oracle Optimizer)和行鎖管理器(row-level manager)來調(diào)整優(yōu)化 SQL 語句虐拓。
6.3.7 備份如何分類
邏輯備份與物理備份心俗。或者冷備份與熱備份蓉驹。
6.3.8 你最擅長的是 oracle 那部分
性能優(yōu)化城榛、故障修復, RAC态兴,DG吠谢,OGG,遷移
6.3.9 喜歡 oracle 嗎诗茎?喜歡上論壇嗎?或者偏好 oracle 的那一部分
官方文檔献汗,MOS 等敢订;性能優(yōu)化、故障修復罢吃, RAC楚午,DG,OGG尿招,遷移
6.3.10 隨意說說你覺得 oracle 最有意思的部分或者最困難的部分
SQL 調(diào)優(yōu)
6.3.11 Oracle 的回滾段的作用是什么
保存數(shù)據(jù)的前像矾柜,保證數(shù)據(jù)讀取的時間點一致性。Oracle 里數(shù)據(jù)的多版本特性就是通過回滾段來實
現(xiàn)的就谜,正因為此怪蔑,Oracle 數(shù)據(jù)庫實現(xiàn)了讀寫不競爭的性能優(yōu)勢!
6.3.12 oracle 的日只有哪幾種丧荐,作用是什么
Alert log files--警報日志缆瓣,
Trace files--跟蹤日志(用戶和進程),
redo log 重做日志(記錄數(shù)據(jù)庫的更改)
歸檔 保存 redo
6.3.13 oracle 進程主要有哪些虹统,作用是什么
pmon smon dbwr lgwr arch lisner
6.3.14 請簡單描述下您對 oracle 鎖機制的認識
ORACLE 里鎖有以下幾種模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表鎖
3:Row-X 行專用(RX):用于行的修改
4:Share 共享鎖(S):阻止其他 DML 操作
5:S/Row-X 共享行專用(SRX):阻止其他事務操作
6:exclusive 專用(X):獨立訪問使用
數(shù)字越大鎖級別越高, 影響的操作越多弓坞。
一般的查詢語句如 select ... from ... ;是小于 2 的鎖, 有時會在 vlocked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from vlockedobjectt1,vsession t2
where t1.session_id=t2.sid order by t2.logon_time;
如果有長期出現(xiàn)的一列,可能是沒有釋放的鎖禀综。
我們可以用下面 SQL 語句殺掉長期沒有釋放非正常的鎖:
alter system kill session 'sid,serial#';
如果出現(xiàn)了鎖的問題, 某個 DML 操作可能等待很久沒有反應简烘。
當你采用的是直接連接數(shù)據(jù)庫的方式,
也不要用 OS 系統(tǒng)命令 killprocessnum 或者 kill -9 process_num 來終止用戶連接定枷,
因為一個用戶進程可能產(chǎn)生一個以上的鎖, 殺 OS 進程并不能徹底清除鎖的問題孤澎。
記得在數(shù)據(jù)庫級別用 alter system kill session 'sid,serial#';殺掉不正常的鎖。
6.3.15 oracle 的 的 Dataguard 有哪幾種模式欠窒,各有什么差別
DataGuard 有三種模式:
1.最大性能
這是 Data Guard 默認的保護模式覆旭。primay 上的事務 commit 前不需要從 standby 上收到反饋信息,該
模式在 primary 故障時可能丟失數(shù)據(jù)岖妄,但 standby 對 primary 的性能影響最小型将。
2.最大可用
在正常情況下,最大可用模式和最大保護模式一樣荐虐;在 standby 不可用時七兜,最大可用模式會自動降
低成最大性能模式,所以 standby 故障不會導致 primay 不可用福扬。只要至少有一個 standby 可用的情況
下腕铸,即使 primary down 機,也能保證不丟失數(shù)據(jù)铛碑。
3.最大保護
最高級別的保護模式狠裹。primay 上的事務在 commit 前必須確認 redo 已經(jīng)傳遞到至少一個 standby 上,
如果所有 standby 不可用亚茬,則 primary 會掛起酪耳。該模式能保證零數(shù)據(jù)丟失, 一般為保證主庫在某個從
庫故障后仍能正常運行,最好配置兩個及以上的從庫。
6.3.16 oracle 冷備與熱備的區(qū)別
熱備份針對歸檔模式的數(shù)據(jù)庫刹缝,在數(shù)據(jù)庫仍舊處于工作狀態(tài)時進行備份碗暗。
而冷備份指在數(shù)據(jù)庫關閉后,進行備份梢夯,適用于所有模式的數(shù)據(jù)庫言疗。
熱備份的優(yōu)點在于當備份時,數(shù)據(jù)庫仍舊可以被使用并且可以將數(shù)據(jù)庫恢復到任意一個時間點颂砸。
冷備份的優(yōu)點在于它的備份和恢復操作相當簡單噪奄,并且由于冷備份的數(shù)據(jù)庫可以工作在非歸檔模式
下,
數(shù)據(jù)庫性能會比歸檔模式稍好死姚。(因為不必將 archive log 寫入硬盤)
第 第7 章 SQL sever
7.1 選擇
7.1.1 在 在 SQL Server 數(shù)據(jù)庫中,你想得到在 products 表中最貴的產(chǎn)品的產(chǎn)品名稱(Productname) )
和產(chǎn)品價格(Price ), 應該使用的 SQL 查詢語句是_____AC_____
SELECT TOP 1 Productname,Price FROM Products ORDER BY Price desc
SELECT Productname,MAX(price) FROM Products
SELECT Productname
7.1.2 SQL Server 是一種(C )軟件
操作系統(tǒng) 語言處理 數(shù)據(jù)庫管理系統(tǒng) 服務性程序
7.1.3 SQL Server 數(shù)據(jù)庫的主數(shù)據(jù)文件的擴展名為(BD )
.sql .mdf .mdb .ldf
7.1.4 關于 sql server 常用的數(shù)據(jù)類型勤篮,以下(C )說法是錯誤的
Image 數(shù)據(jù)類型可以用來存儲圖像 使用字符數(shù)據(jù)類型時都毒,可以改變長度信息
使用數(shù)字數(shù)據(jù)類型時,可以改變長度信息 Bit 數(shù)據(jù)類型為 1 位長度碰缔,可以存儲表示是/否的數(shù)據(jù)
7.1.5 使用 T-SQL 中的(C )語句可以刪除數(shù)據(jù)表格 或者視圖中的一個或多個記錄
DEL PRUGE DELETE DROP
7.1.6 使用 T-SQL 對數(shù)據(jù)的修改是通過(D )語句實現(xiàn)的
MODIFY EDIT REMAKE UPDATE
7.1.7 下列關于 SQL Server 數(shù)據(jù)庫日志的說話錯誤是(D )
日志文件是維護數(shù)據(jù)庫完整性的重要工具 有的對 SQL 數(shù)據(jù)庫的操作都需要寫日志
當日志文件的空間占滿時账劲,將無法寫日志 當修改數(shù)據(jù)庫時,必先寫日志
7.2 填空
7.2.1 主數(shù)據(jù)庫文件的擴展名是mdf_ 金抡,事務日志文件的擴展名是ldf( 此題為 SqlSERVER 題)
7.2.2 sqlserver 數(shù)據(jù)庫瀑焦,如何限制不同人員的訪問權限
根據(jù)需要授予角色權限
7.2.3 SQL Server 下取得當前系統(tǒng)時間的代碼為select GETDATE()
7.2.4 將 將 SQL Server 數(shù)據(jù)復制到其他的數(shù)據(jù)庫中,包括 Access 梗肝、Oracle 榛瓮、DB2 等,采用ODBC __
作為連接機制
7.2.5 SQL Server 能夠識別兩種登錄認證機制--Windows 認證和SQL SERVER 身份 認證
7.2.6 SQL Server 默認的數(shù)據(jù)庫系統(tǒng)管理員的用戶名是2005 以前默認是:sa 巫击,2008 以后是安裝時
設置的 禀晓,默認為本機的名字。
7.2.7 在 在 SQL Server 中定義字符型坝锰,不論 char (n )格式還是 varchar (n )格式匆绣,其數(shù)據(jù)長度均不
能超過8000 字節(jié)
7.2.8 在 在 SQL Server 表中,一個表只能有一個 主鍵____ 什黑,且其值必須唯一
7.2.9 在 在 SQL Server 中,一根數(shù)據(jù)庫至少包含___ 數(shù)據(jù)庫主_ 文件和_ 日志____ 文件
7.2.10 SQL Server 提供了四種數(shù)據(jù)庫備份方式:數(shù)據(jù)庫備份堪夭、日志備份愕把、_ 差異____ 備份以及文件
或文件組備份
7.2.11 在檢索信息時可以通過 WHERE 字句指定檢索的條件,而且 SQL Server 還提供了 NOT森爽、 恨豁、
OR 和AND 三種運算符
7.3 簡答
7.3.1 SQL-SERVER2008 有幾種認證方式?這幾種認證方式有什么區(qū)別爬迟?
1橘蜜、Windows 身份驗證和 SQL 身份驗證都是數(shù)據(jù)庫身份驗證的一種,身份驗證是用以識別數(shù)據(jù)的操
作者身份付呕。不管使用哪種身份驗證计福,只要具有數(shù)據(jù)庫或表的相關權限,那么均可以對數(shù)據(jù)庫及表進
行相關的權限范圍之內(nèi)的增刪查改的操作徽职,所操作后的數(shù)據(jù)都是相互影響象颖;
2姆钉、Windows 身份驗證和 SQL 身份驗證的區(qū)別不是權限说订,因為不管是 Windows 用戶(包括服務器本
地用戶及活動目錄用戶)還是 SQL 用戶抄瓦,都需要在 SQL 管理器中進行授予權限后,才能在權限范
圍之內(nèi)操作陶冷。樓上所說的 windows 用戶登錄默認 windows 管理員為數(shù)據(jù)庫的管理員钙姊,這種說法是錯
誤的,SQL2008 在安裝時埂伦,會讓你添加至少一個 SQL 管理員煞额,一般來說都會添加當前的 Windows
用戶為默認的數(shù)據(jù)庫管理員,當然也可以添加其它任何 Windows 用戶作為數(shù)據(jù)庫管理員(并不是
Windows 管理員就會是數(shù)據(jù)庫管理員)赤屋,在此也可以決定是否啟用 SQL 身份驗證立镶,如果啟用,那么
則需要為 SQL 用戶 SA 設置一個密碼类早。
那么區(qū)別在于媚媒,一個使用 SQL 單獨用戶,一個使用 Windows 用戶涩僻,使用 Windows 用戶可以極大的
方便管理員的管理缭召,統(tǒng)一用戶身份驗證(一般使用活動目錄用戶,在實踐環(huán)境中逆日,一般企業(yè)都會有
自己的活動目錄嵌巷,如果使用 SQL 用戶的話,管理員則需要記憶和維護兩套用戶名及密碼室抽,在這種情
況下就會使用 Windows 用戶搪哪,SQL 可以直接調(diào)用 Windows 用戶并授予數(shù)據(jù)庫及表相關權限。那么
在有權限的情況下坪圾,管理員可以直接使用自己的域用戶來登陸連接 SQL 數(shù)據(jù)庫)
3晓折、只要有相關的權限,所登陸到的數(shù)據(jù)當然是一樣兽泄,前面已經(jīng)說過,身份驗證是用以識別數(shù)據(jù)的操
作者身份病梢,那么不管以何種身份登陸胃珍,只要具有相關權限,那么均可以對數(shù)據(jù)庫及表進行相關的權
限范圍之內(nèi)的增刪查改的操作。
7.3.2 SQL-SERVER2008 中读拆,使用一個有標的具體步驟有哪些霹崎?
1.用下面的語句選出所的表名:
select name from DBName.Sysobjects where xtype='U'
將上面的 DBName 替換成你的數(shù)據(jù)庫名。
2.通過 Excel 及 UltraEdit 等 工具眶拉,把按下面的語句替換 表名 ,生成一系列的修改語句憔儿。
增加一個 IDKEY 字段
ALTER TABLE 表名 ADD idkey bigint identity(1,1);
alter table 表名 add constraint pk_表名 primary key (idkey) ;
3.執(zhí)行這些語句