【Linux面試題8】數據庫筆試題集錦

數據庫

1.1 數據庫基礎

1.1.1 選擇

1.1.1.1 Having 子句的做用是(C )。

A.查詢結果的分組條件 B.組的篩選條件php

C.限定返回的行的判斷條件 D.對結果集進行排序html

1.1.1.2 最經常使用的一種基本數據模型是關係數據模型,它的表示採用(D)

A.樹 B.網絡 C.圖 D.二維表前端

1.1.1.3 數據庫系統的核心是(B)

A.數據模型 B.數據庫管理系統 C.數據庫 D.數據庫管理員java

1.1.1.4 關係表中每一橫行稱爲(B)

A.元組 B.字段 C.屬性 D.碼mysql

1.1.1.5 數據庫管理系統維護中,最重要的是(B)

A程序維護 B數據維護 C編碼維護 D硬件維護linux

1.1.1.6 如下那些不是NoSQL(AD)

A.mssql B memcached C mongodb D postgresql E cassandra F couchdb G redisc++

1.1.1.7 PHP和 MYSQL的聯合使用解決了(C)

A 在proxy上處理數據庫訪問問題程序員

B在www服務器上處理黑客的非法訪問問題web

C 在www服務器上處理數據庫的訪問問題正則表達式

D 在sendmail郵件系統是上處理數據庫的訪問問題

1.1.1.8 如下哪一個端口爲遠程登錄默認端口(C)

A1433 B3389 C3306

1.1.2 填空

1.1.2.1 如何經過shell登陸mysql?(mysql -u -p -P -h)

1.1.2.2 數據庫觸發器能監控的觸發事件有——監視地點(table)—監視事件(insert,update,delete)———觸發時間(after,before)—觸發事件(insert,update,delete)—

1.1.2.3 數據庫系統的組成部分有:硬件、軟件、數據庫、用戶(數據庫管理員)

1.1.2.4 實現多臺交換機或集線器鏈接在一塊兒只能經過級聯的方式(級聯複製)

1.1.2.5 遠程鏈接mysql數據庫的命令是什麼_____mysql -u -p -P -h_

1.1.2.6 主數據庫文件的擴展名是___mdf__,事務日誌文件的擴展名是_ldf_

1.1.2.7 當刪除一個數據庫後,僅能用__binlog,物理備份__數據重建之前的數據庫中的數據

1.1.2.8 SQL中定義別名的三種方法是_______列 AS 別名,列 別名 列=別名____________________

1.1.2.9 查詢病人表中的全部內容,並以住院號倒序排序SQL代碼爲:Select * from pat_visit ______order by___inp_to_____desc

1.1.2.10 查詢一根病人的信息。但忘記了該病人的名字,只記得該病人姓「張」,並且名字中有一個「美」字,SQL代碼爲:Select * from Pat_visit where name__like "張%"__

1.1.2.11 mysql服務器默認的監聽端口是:3306_ ,mysql的配置文件是:____/etc/my.cnf

1.1.3 簡答

1.1.3.1 簡述mysql單機安裝過程

①官網下載二進制安裝包;

②解壓二進制包;

③修改配置文件/etc/my.cnf

④初始化配置;

⑤啓動

1.1.3.2 mysql登陸命令

mysql -u -p -P -h

1.1.3.3 在mysql客戶端查詢工具中,如何獲取當前的全部鏈接信息。

show full processlist

1.1.3.4 如何利用crontab按期執行mysql語句。

mysql -u -p -e "show databases;"

1.1.3.5 說明數據庫內存結構中SGA和PGA的組成,以及這兩個內存區存放信息的區別

SGA區由數據緩衝區,共享池,重作日誌緩衝區,大型池,java池構成;PGA區由排序區,私有SQL區以及堆棧構成。
SGA區是由Oracle分配的共享內存結構,包含一個數據庫實例共享的數據和控制信息。當多個用戶同時鏈接同一個實例時,SGA區數據供多個用戶共享,因此SGA區又稱爲共享全局區。用戶對數據庫的各類操做主要在SGA區中進行。該內存區隨數據庫實例的建立而分配,隨實例的終止而釋放。PGA區是在用戶進程鏈接數據庫,建立一個會話時,由oracle爲用戶分配的內存區域,保存當前用戶私有的數據和控制信息,所以該區又稱爲私有全局區。每一個服務器進程只能訪問本身的PGA區,全部服務器進程PGA區總和即爲實例的PGA區的大小。

1.1.3.6 說明數據庫表空間的種類,以及不一樣類型表空間的做用

共享表空間,獨立表空間

共享表空間:一個數據的文件都存放在一個文件內。

獨立表空間:一個表有一個idb和frm文件。

1.1.3.7 mysql表中的中文字體亂碼,緣由多是什麼?如何修改

字符集編碼不一致問題

alter table 表名 default character set utf8 collate utf8_general_ci;

1.1.3.8 mysql忘記密碼如何操做

--skip-grand-tables #跳過 受權表

--skip-networking #跳過網絡鏈接

1.1.3.9 請寫出目前市場上最多見的2-5種關係型數據庫廠家,並註明他們產品的最新版和你熟悉的或者解除過的版本:

廠家: 最新版本: 熟悉的版本: 接觸過的版本

mysql 5.6 5.7

1.1.3.10 如何修改mysql的root密碼

mysqladmin -uroot -p password oldboy123

set password for 用戶@localhost=password('新密碼')

mysql> alter user '用戶名'@'登陸主機' identified by '密碼(自定義)';

1.1.3.11 請舉出幾個你熟悉的關係型數據庫管理系統和非關係型數據庫管理系統,非關係型數據庫相比之下有什麼不一樣之處(好處和不足)?

關係型:mysql,oracle

非關係型:redis,mongodb

非關係型數據快,操做簡單,可是又丟數據風險。

1.1.3.12 存儲過程與函數的區別

存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫定義的方法,它接收參數返回某種類型的值而且不涉及特定用戶表。

1.1.3.13 什麼是視圖,遊標是什麼?

視圖是一種虛擬的表,具備和物理表相同的功能,能夠對視圖進行增改查操做,視圖一般是有一個表或者多個表的行或者列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。

遊標:是對查詢出來的結果集做爲一個單元來有效的處理。遊標能夠定在該單元中的特定行,從結果集的當前行檢索一行或多行。能夠對結果集當前行作修改。通常不使用遊標,可是須要逐條處理數據的時候,遊標顯得十分重要。

1.1.3.14 你對數據庫瞭解嗎?大家公司的數據庫是什麼樣的?

高可用mysql及主從架構和讀寫分離。

1.1.3.15 大家公司數據庫最大鏈接數是多少?

2000

1.1.3.16 查看缺省引擎

select @@default_storage_engine;

1.1.3.17 MySQL數據庫storage engine中的myisam、innodb有什麼差異

myisam:表級鎖,不支持事務,支持溫備。

innodb:行級鎖,支持事務,支持溫備。自動故障恢復,外鍵。

1.1.3.18 請列舉幾個常見的nosql db 你最熟悉那個?

redis,mongodb,memcached

1.2 SQL語句

1.2.1 選擇

1.2.1.1 DELETE FROM S WHERE 年齡>60語句的功能是(A)

A.從S表中完全刪除年齡大於60歲的記錄

B.S表中年齡大於60歲的記錄被加上刪除標記

C.刪除S表

D.刪除S表的年齡列

1.2.1.2 使用什麼命令能夠清除表中全部的內容?(CD)

A.INSERT B.UPDATE C.DELETE D.TRUNCATE

1.2.1.3 如下哪一個表不用於mysql 的權限管理( D)

A.HOST B.DB C.COLUMNS_PRIV D.MANAGER

1.2.1.4 在SOL 語法中,用於更新的命令是:( B)

A.INSERT B.UPDATE C.DELETE D.CREATE

1.2.1.5 下面命令中不是數據庫用來DML操做是( A)

A.SELECT B.UPDATE C.INSERT D.DROUP

1.2.1.6 SQL 語言中,刪除一個表的命令是( B)

A.DELETE B. DROP C.CLEAR D.RI MORE

1.2.1.7 MySQL語句中刪除一個表(假如表名稱是t1)的命令是_______C_

Arm table t1 Bdelete table t1 Cdrop table t1 Dtruncate t1

1.2.1.8 下面哪一個語句將user表的名稱變動爲userinfo?(C)rename table user to userinfo

A.alter table user rename as userinfo B .rename to userinfo from user

C.rename user to userinfo D.rename user as userinfo

1.2.1.9 sql語句中修改表結構的命令是(C)

Amodify table Bmodify structure Calter table Dalter structure

1.2.1.10 帶有(B)子句的select語句能夠在表的一行或多行上防止排他鎖

A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH

1.2.1.11 在SQL中,創建表用的命令是(B)

A.CREATE SCHEMA B.CREATE TABLE C.CREATE VIEW D.CREATE INDEX

1.2.1.12 SQL 語言是(C)語言

A層次數據庫 B網絡數據庫 C關係數據庫 D非數據庫

1.2.1.13 SQL語言中,條件年齡BETWEEN 15 AND 35表示年齡在15至35之間,且(A)

A包括15歲和35歲 B不包括15歲和35歲

C包括15歲但不包括35歲 D包括35歲但不包括15歲

1.2.1.14 在數據庫管理系統能實現對數據庫中的數據查詢、插入、修改和刪除,這類功能稱爲(C)

A數據定義功能 B數據管理功能 C數據操縱功能 D數據控制功能

1.2.1.15 下列執行數據的刪除語法在運行時不會產生錯誤信息的選項是(A)

A.Delete * from pat_visit Where inp_no = '6' B.Delete From pat_visit Where inp_no ='6'

C.Delete pat_visit Where inp_no = '6' D.Delete pat_visit Set inp_no = '6'

1.2.2 填空

1.2.2.1 在SQL中,用子句————DISTINCT——————消除重複出現的元組。

1.2.2.2 標準的SQL語言語句類型能夠分爲—DML—、—DQL—、—DDL—、DCL

1.2.2.3 SQL語句中的查詢語句是select(DQL)

1.2.2.4 字符轉換日期函數___select date_format(now(),'%Y-%m-%d')_

1.2.2.5 DML包括__insert__ update delete

1.2.2.6 簡述where和having的區別:

Where 子句是用來指定 "行" 的條件的,而 Having 子句是指定 「組」 的條件的

因此 Where 子句 = 指定行所對應的條件

因此 Having 子句 = 指定組所對應的條件

當在 Where 子句和 Having 子句中均可以使用的條件,從語句的執行效率來看,最好寫在 Where 子

句中。

在使用 Count 函數等對錶中的數據進行聚合操做時,DBMS 內部會進行排序處理,而排序操做會增

加機器的負擔,減小排序的行數,能夠增長處理速度。

使用 Where 子句指定條件時,因爲排序以前就對數據進行了過濾,因此可以減小排序的數據量。但

是 Having 子句是在排序以後纔對數據進行分組的,所以與前者相比,須要排序的數據量就要多得

多。

第三,使用 Where 子句更具速度優點的另外一個理由是,能夠對 Where 子句指定條件所對應的列建立

索引,這樣能夠大幅提升處理速度。

第四,Where 子句中不能使用聚合函數,而 Having 子句中能夠。

1.2.2.7 在SQL中,創建數據庫的命令是___create databases;_,創建視圖的命令是___create vim v as (select * from table1)union all (select * from table2),創建索引的是_______alter table student add index idx_name(name)

1.2.2.8 在SQL中,用___insert___命令向表中輸入數據,用__select___命令檢查和查詢表中的內容

1.2.2.9 在SQL中,用___update___命令能夠修改表中的數據,用__alter___命令能夠修改表的結構

1.2.2.10 在SQL中,Alter命令能夠有兩個選擇項,___alter table change/modify___子命令用於修改表的性質,__alter table add__子命令用於增長列

1.2.2.11 在SQL中,用__delete___命令能夠從表中刪除行,用___drop__命令能夠從數據庫中刪除表

1.2.2.12 在SQL中,控制用保留字___null___,非空值用保留字___not null__

1.2.2.13 SELECT命令中,表示條件表達式用__where__字句,分組用___group by__字句,排序用__order by字句

1.2.2.14 在ORDER BY字句的選項中,DESC表明__倒序___序輸出,若省略時,表明__正序__序輸出

1.2.2.15 合併多個查詢結果集,應使用__union___關鍵字

1.2.3 簡答

1.2.3.1 列舉SQL經常使用命令:

show databases;

create database;

select * from table;

update table set state

1.2.3.2 Mysql查看order表的第3條到第7條的數據。

select * from order limit 2,5

1.2.3.3 Mysql授予用戶admin經過IP爲192.168.0.10/24對數據庫的所有受權。

grand all on *.* to admin@'192.168.0.%' identified '123';

1.2.3.4 對order這個表的name字段數據進行base64編碼

select to_base64(name) from 'order';

1.2.3.5 爲何說group by和order by操做的是代價高昂的?

沒有合理的索引條件下,須要大量的CPU時間來排序和處理。

1.2.3.6 寫分組瀏覽,分組求和,分組求最大值的sql語句,每一個只能用1句話

select group_contat(字段1) from db group by '字段2'

select sum(字段1) from db group by '字段2'

select max(字段1) from db group by "字段2"

1.2.3.7 如何列出全部數據庫?(show databases;)

1.2.3.8 如何查看錶內全部數據?(select * from table;)

1.2.3.9 如何知道表內行數?(select count(*) from table;)

1.2.3.10 用SQL實現如下統計結果

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 CSBH;
select CSBH,sum(CSBH) as SUM_GJQJ from table group by CSBH;

1.2.3.11 用SQL命令實現給主鍵添加索引

alter table oldboy add primary key pri(id);

1.2.3.12 刪除以下表中年齡大於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),name varchar(20),age int,city varchar(20)) engine=innodb;
insert into user_table(name,age,city) values(tom,20,bj),(jimmy,50,nj),(zhou,33,sh),(jing,30,nj),(nannan,28,sh);

1.2.3.13 根據上題的表,計算出每一個城市的人數和平均年齡

select city,sum(name),avg(age) from user_table group by city;

1.2.3.14 查詢下表平均成績大於60分的同窗的學號s_d)和平均成績(score)

表Student 學生表

S_id Sname Ssex

1 Xiaoli 男

2 xiaowang 女

3 zhanglong 男

4 zhaohu 女

create table student(s_id int(11),sname varchar(20),ssex varchar(20)) engine=innodb;
insert into student(s_id,sname,ssex) values(1,xiaoli,男),(2,xiaowang,女),(3,zhanglong,男),(4,zhaohu,女);

表 Course 課 程 表

C_id Cname T_id

1 語文 1

2 歷史 3

3 數學 2

4 政治 4

create table course(c_id int(11),cname varchar(20),t_id int(20)) engine=innodb;
insert into course(c_id,cname,t_id) values(1,語文,1),(2,歷史,3),(3,數學,2),(4,政治,4)

表SC 成績表

s_id C_id score

1 2 99

3 4 88

1 3 55

2 1 77

create table sc(s_id int(11),c_id int(11),score varchar(20)) engine=innodb;
insert into sc(s_id,c_id,score) values(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 teacher(t_id int(11),tname varchar(20)) engine=innodb;
insert into teacher(t_id,tname) values(1,zhangsan),(2,lisi),(3,wangwu),(4,zhouliu);

查詢上全部同窗的學號姓名、選課數、總成績

①select student.s_id,avg(sc.score) from student join sc on student.s_id=sc.s_id having avg(sc.score)>60;
②select student.s_id,student.sname,count(sc.cname),sum(sc.score) from student join sc on student.s_id=sc.s_id

1.2.3.15 有兩個表A和B,表結構和字段分別爲:

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的結果

select a.name,b.hobbt from a jon b on a.id=b.id

1.2.3.16 寫出MySQL5.6新建用戶dev,受權op庫test表全部權限,任何地址的訪問權限SQL

grand all on op.test to dev@'%' identified '123';

1.2.3.17 寫出一條sql語句:取出表A中知足時間2006年1月1日至2006年1月31日的記錄(時間字段爲time)

select * from table where time between '2006-01-01' and '2006-01-31';

1.2.3.18 寫出一條SQL語句:清除A表中的數據,但不刪除表

delete * from tablename;或者truncate table name;

1.2.3.19 查找在機關單位任職的人員姓名、性別、出生日期、單位名稱、而且查詢結果按照單位排序;

select name,sex,birthday,company from table order by company desc;

1.2.3.20 查找性別爲女的少數民族的非中共人員姓名、民族、出生日期;

select name,mingzu,birthday from table where sex='女' and 面貌!=中共黨員;

1.2.3.21 在事業單位查找具備研究生學歷博士學位的在任人員,要求顯示姓名、性別、出生日期、政治面貌、單位名稱、職務名稱、批准任職日期,同時結果按照批准任職日期升序;

select name,sex,birthday,政治面貌,company,職務,批准日期 from table where xueli=boshi order by 批准日期;

1.2.3.22 查詢在不一樣單位性質類別的單位任職的人數;

select count(name) from table group by company;

1.2.3.23 請寫出下列語句的執行結果:select replace (ltrim(rtrim('abc3453436')),'34','abc')

abcabc53abc36

1.2.3.24 寫一個查詢語句,從數據庫表中取出年齡age最大的十我的

select name from table order by age desc limit 10;

1.2.3.25 編寫SQL語句。統計計算機系58班每月過生日的男生人數,井按月進行排序

表 dept (系):

dept_id(系編號),dept_name(系名稱)

表 class(班級):

class_id(班編號),dept_i(系編號),class_name(班名)

表 setdent(學生):

setdent_id(學生編號),class_id(班編號), sex(性別),birthday(生日)

select count(setdent.setdent_id),date_format(setdent.birthday,%m) from setdent join class on setdent.class_id=class.class_id join deptp on dept.dept_id=class.dept_id where dept.dept_name='計算機' and sex='男' group by Date_format(setdent.birthday,%m) order by date_format(setdent.birthday,%m) desc;

1.2.3.26 現有T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)

查詢T表中地址中包含「北京」的SQL語句

插入一條數據到T表中

請寫出將T表中第3~5行數據列出來的SQL語句

select * from t where ADDRESS="%北京%";

insert into t(ID,NAME,ADDRESS,PHONE,LOGDATE) values(,,,,);

select * from t limit 2,3;

1.2.3.27 Mysql建立數據庫的命令,建立表的命令,插入語句的命令?

create database

create table ;

insert into t()values()

1.2.3.28 數據庫中的兩個數據庫表,定義以下:

表名1:cardApply

字段(字段名/類型/長度):

applyNo varchar 8; //申請單號(關鍵字)

applyDate date 8; //申請日期

state varchar 2; //申請狀態

表2:cardApplyDetail

字段(字段名/類型/長度):

applyNo varchar 8; //申請單號(關鍵字)

name varchar 30; //申請人姓名

idCard varchar 5; //ID卡號

applyNo varchar 8; //申請單號(關鍵字)

其中,兩個表的關聯字段爲申請單號,依據上述信息完成1-5題目:

查詢ID卡號爲11111的申請日期

select cardApply.applydate from cardApply join cardApplyDetail on cardApplyDetail.applyNo=cardApply.applyNo where cardApplyDetail.idCard ='11111';

查詢同一個ID卡號有兩條以上記錄的ID卡號及記錄個數

select idCard,count(idCard) from cardApplyDetail group by idCard having count(idCard )>2;

將ID卡號爲11111的記錄在兩個表中的申請狀態均改成02

update cardApplyDetail set state='02' where idCard='11111';

刪除cardApplyDetall 表中全部姓李的記錄

delete * from cardApplyDetall where name='李%';

假如某一天有10我的申請,另一天有20我的申請,還有一天有30我的申請,查詢出申請卡最多的那一天日期

select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit 1;

1.2.3.29 第一題

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,sname varchar(20) not null,sage int not null,ssex enum('m','f') not null default 'm') engine=innodb charset='utf-8';

查詢姓張的學生名單

select * from student where name='張%';

查詢全部同窗的學號、姓名、選課數、總成績

select student.s#,student.sname,count(sc.c#),sum(sc.score) from student join sc on sc.s#=student.s# group by student.sname;

查詢選修「葉平」老師所授課程的學生中,成績最高的學生姓名及其成績

select student.sname,max(score),avg(score) from student join sc on student.s#=sc.s# join course on course.c#=sc.course.c# join teacher on course.t#=teacher.t# group by teacher.tname where teacher.tname='葉平';

1.2.3.30 第二題

第一題中的教師表中哪一個字段能夠創建惟一索引?寫出創建惟一索引的語句

t#創建惟一索引。

alter table teacher add unique key index(t#);

1.2.3.31 第三題

如何檢查第一題中學生表在數據庫中所佔的空間大小

select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables where table_name='student';

如何將第一題中的4個表進行備份,數據庫用戶、密碼爲:admin/admin 數據庫名爲:dbschool

select concat("mysqldump -uadmin -padmin" ,talble_schema " ",table_name,">temp/",table_schema,"__",table_name,".sql") from infomation_schema.tables where table_schema not in ('infomation_schema','performance_schema','sys') into outfile 'tmp.bak.sh';

1.2.3.32 部門表:t_dept(deptid ,deptname)工資表:t_salary(id,employeeid,deptid,salary)要求:查出員工的平均工資大於3000的部門名稱

select t_depy.depyname ,avg(t_salary.salary) from t_dept join t_salary on t_dept.deptid=t_salary.deptid group by t_dept.deptid having avg(t_salary.salary)>3000;

1.2.3.33 student表(Sno,Sname,Sage,Ssex)Course表(Cno,Cname,Ccredit)SC表(Sno,Cno,grade)

建表student、course、SC

create table student(sno int,sname varchar(20),sage int,ssex varchar(10))

create table course(cno int,cname varchar(20),ccredit varchar(20))

create table course(sno int , cno int,grade varchar(20))

查詢年齡小於20的學生學號、年齡,並顯示

select sno,sname,sage from student where sage<20;

查詢年齡不在20-23(包括20,23)的學生的成績

select student.sname sc.grade from student join sc on student.sno=sc.sno where student.sage<20 and student.sage>23;

1.2.3.34 給出查詢表A(ID,Name)中存在ID重複三次以上的記錄的SQL語句

select id,count(id) from a group by id having count(id)>3;

1.2.3.35 mysql用戶名:root,密碼:123456,socket:/opt/mysql3306/mysql3306.sock,跑默認端口,請使用一條命令更新該數據源neutron庫中的ipallocations表中的ip_address 字段等於10.4.182.36的記錄爲202.113.14.92

mysql -uroot -p123456 -S /opt/mysql3306/mysql3306.sock -e "update table neutron.ipallocations set ip_address="202.113.14.92" where ip_address='10.4.182.36';

1.2.3.36 寫出如下SQL語句(涉及到表名和字段自定義)

查詢某一個表前20條記錄

select * from t limit 20;

某公司從下個月起,每一個人工資在原有基礎上上漲10%

update table a salary=salary+salary*0.1 where date=date_format(now(),%m)+1

刪除某個表中日期爲2017-01-01之前的數據

delete * from a where date<'2017-01-01';

新增一條記錄

insert into a values();

備份數據庫

mysqldump -uroot -poldboy123 -A -master-date -single-transaction -R -E -triggers >/tmp.bak.gz

1.2.3.37 有三張表分別爲客戶表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語句完成

統計每月開通的客戶數

select count(cust_id) ,date.format(accounts.acc_opendate,%m) from customers join accounts on customers.cust_id=accounts.cust_id group by date_format(accounts.acc_opendate,%m);

列出上個月開通客戶列表,並輸出這些客戶所具備的帳戶和用戶數量

select accounts.cust.id,count(users.user.id) from accounts join users on accounts.cust_id=users.cust_id where data_format(accounts.acc_opendate,%m)=date_format(now(),%m)-1;

統計三個月內登陸過的客戶數量

select count(user_id) from users where date_format(lost_login_date,%m) in date_format(now(),%m)-1,date_format(now(),%m)-2,date_format(now(),%m)-3;

統計老客戶今年開通帳戶的數量,老客戶是指今年之前開通的帳戶

select date_format(cust_opendate,%Y),count(cust_id) from customers where date.format(cust_opendate,%Y)=date.format(now(),%Y);

1.2.3.38 SQL

表名 user

Name Tel Content Date

張三 13333663366 大專畢業 2006-10-11

張三 13612312331 本科畢業 2006-10-15

張四 021-55665566 中專畢業 2006-10-15

(a)有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中

insert into user values(‘小王 ’,‘13254748547’, ‘高中畢業’, ‘2007-05-06’);

(b)請用sql語句把張三的時間更新成爲當前系統時間

update user set date=date_format(now(),"%Y-%m-%d") where name='張三';

(c)請寫出刪除名爲張四的所有記錄

delete from user where name='張四';

1.2.3.39 建立一個用戶並賦予權限

grand all on *.* to oldboy@localhost identified '123';

1.2.3.40 建立表空間neuspace,數據文件命名爲neudata.dbf,存放在d:\data目錄下,文件大小爲200MB,設爲自動增加,增量5MB,文件最大爲500MB

create tablespace neuspace datefile 'd:\data\neudata.dbf' size 200 autoextend on text 5M maxsize 500M;

1.2.3.41 以系統管理員身份登陸,建立帳號tom,設置tom的默認表空間爲neuspace.爲tom分配connect和resource系統角色,獲取基本的系統權限。而後爲tom分配對用戶scott的表emp的select權限和對SALARY,MGR屬性的update權限

create user tom identified by tom default tablespace account;

grand connect,resource to tom;

grand select on scott.emp to tom;

grand update on SALARY.MGR to tom;

1.2.3.42 按以下要求建立class

屬性 類型(長度) 默認值 約束 含義

CLASSNO 數值(2) 無 主鍵 班級編號

CNAME 變長字符(10)無 非空 班級名稱

create table class(classon int(2) not null primary key auto_increment comment '班級編號',cname varchar(10) not null comment '班級名稱')

1.2.3.43 學生表有四個字段:學號、姓名、年級、學分,統計出按年級降序同名同姓的數據狀況(寫出sql語句)

select count(姓名),年級 from a group by name order by 年級 ;

1.2.3.44 在表class的CNAME屬性上建立索引class_sname_idx

alter table class add index class_sname_idx(cname);

1.2.3.45 sql類

學生信息表

姓名(Name) 學號(Code)

張三 001

李四 002

馬五 003

甲六 004

考試信息表

學號 學科 成績

001 數學 80

002 數學 75

001 語文 90

002 語文 80

001 英語 90

002 英語 85

003 英語 80

004 英語 70

查詢各科成績的平均分,顯示欄位爲學科、平均分,sql怎麼寫

select 學科,avg(成績)from 考試 group by 學科;

查詢全部學生各科成績,顯示欄位爲姓名、學號、學科、成績,並以學號與學科排序,沒有成績的學生也須要列出,sql怎麼編寫

select a.name,a.code,b.course,b.grade from a join b on a.id=b.id order by course;

查詢出單科成績最高的,顯示欄位爲:姓名、學號、學科、成績,sql怎麼編寫

select a.name,a.id,b.course,max(grade) from a join b a.id=b.id group by b.course;

列出每位學生各科成績,要求輸出格式:姓名、學號、語文成績、數學成績、英語成績,sql怎麼寫

select a.name,a.id

case when b.學科=‘語文’ then b.成績 then as ‘語文成績’,

case when b.學科=‘數學’ then b.成績 then as ‘數學成績’

case when b.學科=‘英語’ then b.成績 then as ‘英語成績’

from a join b on a.id=b.id

group by a.id;

1.2.3.46 假若有A*和B兩個表,A表中包括ID,COL1,COL2,COL3等欄位,B表中包括ID,COL1,COL2,COL4,COL5等欄位,現須要把B中的CLO1,COL2內容更新到A表COL1,COL2中,ID***爲關鍵字段,要求只寫一個SQL**

update table a set (select clo1,col2 from b)

1.2.3.47 不借助第三方工具,如何得到SQL的執行計劃

explain

1.3 MySQL索引

1.3.1 選擇

1.3.1.1 在SQL數據庫一個班級表裏只記錄了100位同窗的狀況,那麼對該表創建索引文件的描述正確的是(B)

A必定要,由於索引有助於加快搜索記錄的進程

B不適宜,由於對少林記錄的表進行索引實際上會產生不利的影響

C必定要,由於索引對於任何數據庫表都是必要的

D沒有必要,由於創建索引對任何數據庫的性能都沒有影響

1.3.2 簡答

1.3.2.1 索引的好處和壞處是什麼?

好處,在有索引的條件下查詢速度快。

壞處,須要維護成本。

1.3.2.2 數據庫中,哪些列須要建立索引,哪些列不適合建立索引

主鍵索引,惟一列,聯合列;

1.3.2.3 Mysql列出數據庫___show databases;切換當前用戶鏈接的數據庫_-su___

1.3.2.4 請問如下一些查詢語句是否用到該索引?()對last_name和first_name作索引。

A.SELECT * FROM customer_master WHERE first_name = 'Ed';

B.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE '%rane' AND first_name = 'Ed';

C.SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';

D.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY first_name,last_name;

E.SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';

1.3.2.5 說說你對索引的認識(結構、對dml的影響、爲何提升查詢性能)

索引有 B-TREE、BIT、CLUSTER 等類型。ORACLE 使用了一個複雜的自平衡 B-tree 結構;一般來

說,在表上創建恰當的索引,查詢時會改進查詢性能。但在進行插入、刪除、修改時,同時會進行

索引的修改,在性能上有必定的影響。有索引且查詢條件能使用索引時,數據庫會先度取索引,根

據索引內容和查詢條件,查詢出 ROWID,再根據 ROWID 取出須要的數據。因爲索引內容一般比全

表內容要少不少,所以經過先讀索引,能減小 I/O,提升查詢性能。

b-tree index/bitmap index/function index/patitional index(local/global)索引一般能提升 select/update/delete

的性能,會下降 insert 的速度。

1.4 MySQL優化

1.4.1 選擇

1.4.1.1 順序表(2,6,8,10,12,15,16,18,24,28,32)中,用二分法查找關鍵碼值,所需的關鍵詞比較次數爲(c)

A. 3 B. 4 C.5 D. 6

1.4.1.2 從二叉樹的任一結點出發到根的路徑上,所通過的結點序列必按其關鎮字降仔指列。(c)

A二叉排序樹 B.大頂堆 C 小頂堆 D.平衡二叉樹

1.4.2 填空

1.4.2.1 在總計函數中,傳回非NULL值的字段數目的函數名稱是____count()__

1.4.3 簡答

1.4.3.1 若果一個sql查詢語句很長,執行速度慢,你會想到哪些優化的方法?

查詢不須要的記錄,使用 limit 解決;

多表關聯返回所有列,指定 A.id, A.name, B.age;

老是取出所有列,SELECT * 會讓優化器沒法完成索引覆蓋掃描的優化。

優化 count() 查詢

優化關聯查詢

優化子查詢(即嵌套查詢)

優化 GROUP BY 和 DISTINCT

優化 LIMIT 分頁

優化 UNION 查詢

1.4.3.2 數據庫裏有些數據會反覆被查詢,問有什麼好方法提升效率?

創建索引

分區(如 MySQL,按時間分區)

儘可能使用固定長度字段和限制字段長度(如 varchar(10))

增長緩衝區

若是設計表的級聯,不一樣的表存儲在不一樣磁盤上,以增長 I/O 速度

優化 sql 語句,減小比較次數

限制返回條目數(mysql 中使用 limit)

1.4.3.3 系統中,主要的業務表。按月進行分表。7,8,9月表分別爲tab_20170七、tab_20170八、tab_201709這三個表裏。表結構以下:

SQL> desc tab_201707;

Name Type Nullable Default Comments

ID NUMBER 自增

CID NUMBER Y 批次ID

CODE VARCHER2(20) Y 特服號

CORPORATEID NUMBER 企業ID

USERID NUMBER Y 用戶ID

請寫出SQL語句,統計七、八、9三個月,每一個USERID的記錄總數

select userid,count(userid) from tab_201707;

1.4.3.4 什麼是跨站腳本攻擊,有何危害,sq|注入攻擊如何防範

XSS 跨站腳本攻擊:兩種狀況。一種經過外部輸入而後直接在瀏覽器端觸發,即反射型 XSS;還有

一種則是先把利用代碼保存在數據庫或文件中,當 web 程序讀取利用代碼並輸出在頁面上時觸發漏

洞,即存儲型 XSS。DOM 型 XSS 是一種特殊的反射型 XSS。

跨站點腳本(XSS)容許攻擊者經過利用因特網服務器的漏洞來發送惡意代碼到其餘用戶。攻擊者

利用跨站點腳本(XSS)攻擊向那些看似可信任的連接中注入惡意代碼。當用戶點擊了連接後,內

嵌的程序將被提交而且會在用戶的電腦上執行,這會使黑客獲取。

危害:前端頁面能作的事它都能作。(不只僅盜取 cookie、修改頁面等)

漏洞防範

(1) 特殊字符 HTML 實體轉碼。最好的過濾方式是在輸出和二次調用的時候進行加 HTML 實體

一類的轉碼,防止腳本注入。

(2) 標籤事件屬性黑名單。特殊字符容易被繞過,因此還得加標籤事件得黑名單或者白

名單,這裏推薦使用白名單的方式,實現規則能夠直接使用正則表達式來匹配,若是匹配到的事件

不在白名單列表,就能夠直接攔截,而不是過濾爲空。

1.4.3.5 在工做中,一臺線上MSSQL數據庫查詢數據忽然變得異常緩慢,若是交給你排查,請寫出排查思路

首先應該從系統級別來排查。先找出到底哪裏慢,是特定操做慢呢,仍是全部操做都慢了。

既然是忽然變慢,那麼就是說以前仍是比較快的。自從某個特殊事件發生後,慢了下來。特殊事件

通常包括:

一、程序作了修改。

二、忽然有大數據量的系統訪問。

三、某些不經常使用功能忽然啓用,或大量訪問。

四、某些硬件出了功能性問題。

對於系統總體變慢,基本上仍是先查系統日誌。查最近的系統更新日誌。查看磁盤剩餘容量。硬件

是否由異常。

1.4.3.6 SQL語句調優

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';

1.4.3.7 列出您認爲sql優化能夠從哪些方面進行

一、sql 語句的執行計劃是否正常。

二、減小應用和數據庫的交互次數、同一個 sql 語句的執行次數。

三、數據庫實體的碎片的整理(特別是對某些表常常進行 insert 和 delete 動做,尤爲注意,索引字段

爲系列字段、自增加字段、時間字段,對於業務比較頻繁的系統,最好一個月重建一次)。

四、減 少表之間的關聯,特別對於批量數據處理,儘可能單表查詢數據,統一在內存中進行邏輯處理,減小

數據庫壓力(java 處理批量數據不可取,儘可能用 c 或者 c++ 進行處理,效率大大提高)。

五、對訪問頻繁的數據,充分利用數據庫 cache 和應用的緩存。

六、數據量比較大的,在設計過程當中,爲了減小其餘表的關聯,增長一些冗餘字段,提升查詢性能。

1.4.3.8 某個系統sql突然變慢,影響了系統的性能,但經過sqlplus或者PL/SQL developer運行改sql,速度卻很快,請問產生此狀況的可能緣由,並簡述解決辦法

listener.log 過大致使

1.5 MySQL集羣

1.5.1 選擇

1.5.1.1 下面對Linux下mysqldump備份命令及參數描述正確的是(A)

A.mysqldump -h ip -u -p DBNAME>back.sql B.mysqldump -P ip -h DBNAME>back.sql

C.mysqldump -u ip -P DBNAME>back.sql D.mysqldump -h ip -u DBNAME>back.sql

1.5.1.2 如何將MySQL數據庫中的mail這個數據庫備份成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主從結構的主數據庫中不可能出現如下哪一種日誌______C__

A錯誤日誌 B事務日誌 C中繼日誌 Dredo log

1.5.1.4 對於數據庫備份正確的作法是:B

A中止業務開始備份 B 中止數據庫開始備份 C不須要中止備份 D根據狀況而定

1.5.2 填空

1.5.2.1 如何用mysql命令進行備份和恢復?以Lest庫爲例,建立一個備份,並再用此備份進行恢復

mysql -uroot -poldboy123 -B lest >/tmp/lest.bak.gz

source /tmp/lest.bak.gz

1.5.2.2 Mysql備份工具___xtrabackup,mysqldump___

1.5.3 簡答

1.5.3.1 天天凌晨2點對mfdata數據庫進行備份,備份到/data/mysql/下,並以時間爲備份名。

crontab -e

00 02 * * * /bin/sh /server-scripts/backup.sh >/dev/null 1&>2

mysqldump -uroot -poldboy123 -B mfdata >/data/mysql/backup_$(date +%F).bak.sql

1.5.3.2 mysql備份命令

xtraback

mysqldump

本地備份 mysqldump -uroot -p -S /tmp/mysql.sock

遠程備份 mysqldump -uroot -p -h 10.0.0.51 -P3306

1.5.3.3 說明一下mysql主從複製原理並描述一下部署主從複製的步驟

1.change master to 時,ip pot user password binlog position 寫入到 master.info 進行記錄

\2. start slave 時,從庫會啓動 IO 線程和 SQL 線程

3.IO_T,讀取 master.info 信息,獲取主庫信息鏈接主庫

\4. 主庫會生成一個準備 binlog DUMP 線程,來響應從庫

\5. IO_T 根據 master.info 記錄的 binlog 文件名和 position 號,請求主庫 DUMP 最新日誌

\6. DUMP 線程檢查主庫的 binlog 日誌,若是有新的,TP(傳送)給從從庫的 IO_T

\7. IO_T 將收到的日誌存儲到了 TCP/IP 緩存,當即返回 ACK 給主庫 ,主庫工做完成

8.IO_T 將緩存中的數據,存儲到 relay-log 日誌文件,更新 master.info 文件 binlog 文件名和 postion,

IO_T 工做完成

9.SQL_T 讀取 relay-log.info 文件,獲取到上次執行到的 relay-log 的位置,做爲起點,回放 relay-log

10.SQL_T 回放完成以後,會更新 relay-log.info 文件。

  1. relay-log 會有自動清理的功能。

1.5.3.4 備份Mysql的全部數據庫。

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz;

1.5.3.5 對mysql數據庫test進行備份和恢復

create database test;

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz

source /tmp/backup. bak.gz

1.5.3.6 如何備份某個庫,某個庫下的某個表,某個庫排除某個表

mysqldump -uroot -poldboy123 testdb --ignore-table test123>/tmp/backup/test.bak.gz

1.5.3.7 如何恢復備份的數據,過程,注意事項?

mysqldump -uroot -poldboy testdb </tmp/backup/test.bak.gz

還原直接複製目錄的備份 經過這種方式還原時,必須保證兩個 MySQL 數據庫的版本號是相同

的。MyISAM 類型的表有效,對於 InnoDB 類型的表不可用,InnoDB 表的表空間不能直接複製。

1.5.3.8 主從概念,如何配置,管理,監控,有肯定。主從如何同步的?

1.change master to 時,ip pot user password binlog position 寫入到 master.info 進行記錄

\2. start slave 時,從庫會啓動 IO 線程和 SQL 線程

3.IO_T,讀取 master.info 信息,獲取主庫信息鏈接主庫

\4. 主庫會生成一個準備 binlog DUMP 線程,來響應從庫

\5. IO_T 根據 master.info 記錄的 binlog 文件名和 position 號,請求主庫 DUMP 最新日誌

\6. DUMP 線程檢查主庫的 binlog 日誌,若是有新的,TP(傳送)給從從庫的 IO_T

\7. IO_T 將收到的日誌存儲到了 TCP/IP 緩存,當即返回 ACK 給主庫 ,主庫工做完成

8.IO_T 將緩存中的數據,存儲到 relay-log 日誌文件,更新 master.info 文件 binlog 文件名和 postion,

IO_T 工做完成

9.SQL_T 讀取 relay-log.info 文件,獲取到上次執行到的 relay-log 的位置,做爲起點,回放 relay-log

10.SQL_T 回放完成以後,會更新 relay-log.info 文件。

\11. relay-log 會有自動清理的功能。

監控

1)監控 MYSQL 的運行狀態;

2)Slave 機器的 IO 和 SQL 狀態都必須爲 YES,缺一不可;

1.5.3.9 msyql備份命令?mysql如何給jfedu用戶對全部表受權訪問,密碼爲jfedu.net

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql

grand all on . to jfdeu@localhost identified by 'jfedu.net';

1.5.3.10 如何判斷mysql主從是否同步? 該如何使其同步?

show slave status\G;

Slave_IO_Running

Slave_SQL_Runing

1.5.3.11 mysql的innodb如何定位鎖問題,mysql如何減小主從複製延遲

鎖監控設計到的命令:

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 從內存寫入磁盤的控制開關

每次事務提交都當即刷新 binlog 到磁盤(雙一標準中的其一)

sync_binlog=1

每次事務提交不當即寫入磁盤,靠操做系統判斷何時寫入

sync_binlog=0

說明:5.6 默認是 0,5.7 之後默認是 1

2 dump 線程多致使的,系統資源壓力大,因爲傳送日誌是串行的。

從庫越多,壓力越大

因爲超大事務存在,因爲是串行工做,會阻塞後續其餘事務的傳送。

解決方案:

減小大事務

group commit (須要配合 GTID 來實現的)

3 從庫-IO 線程阻塞

大事務拆成小事務

事務量大(主庫壓力大)

group commit 能夠緩解

業務的分離和分佈式(Mycat,InnoDB Cluster)

4 SQL 線程慢(Classic replication 傳統) *****

緣由:

從庫 默認只有一個 SQL 線程,串行回放事務。在主庫有併發事務量大,或者有超大事務時,都會導

致 SQL 延時較嚴重。

如何解決:

5.6 版本,加入了 GTID 特性,因此支持了併發 SQL 特性,基於不一樣庫實現並行回放事務

5.7 版本,GTID 功能進行了升級,能夠經過 Logical_clock 模式,實現事務級別的多 SQL 線程的回

放。咱們把這種複製模式叫作 MTS。

1.5.3.12 寫出對MySQL數據庫test進行備份和恢復的命令

mysqldump -uroot -poldboy123 test >/tmp/bakcup/test.bak.sql

create databases test;

source /tmp/backup/test.bak.sql

1.5.3.13 Mysql的binlog格式有哪些,默認的是什麼格式,格式選取的標準是什麼

binlog 有三種格式:Statement、Row 以及 Mixed。

–基於 SQL 語句的複製(statement-based replication,SBR),

–基於行的複製(row-based replication,RBR),

–混合模式複製(mixed-based replication,MBR)。

一、STATEMENT 模式(SBR)

每一條會修改數據的 sql 語句會記錄到 binlog 中。優勢是並不須要記錄每一條 sql 語句和每一行的數

據變化,減小了 binlog 日誌量,節約 IO,提升性能。缺點是在某些狀況下會致使 master-slave 中的

數據不一致(如 sleep()函數, last_insert_id(),以及 user-defined functions(udf)等會出現問題)

二、ROW 模式(RBR)

不記錄每條 sql 語句的上下文信息,僅需記錄哪條數據被修改了,修改爲什麼樣了。並且不會出現

某些特定狀況下的存儲過程、或 function、或 trigger 的調用和觸發沒法被正確複製的問題。缺點是

會產生大量的日誌,尤爲是 alter table 的時候會讓日誌暴漲。

三、 MIXED 模式(MBR)

以上兩種模式的混合使用,通常的複製使用 STATEMENT 模式保存 binlog,對於 STATEMENT 模式

沒法複製的操做使用 ROW 模式保存 binlog,MySQL 會根據執行的 SQL 語句選擇日誌保存方式。

1.5.3.14 Mysql主從是否同步,要在主庫上查看仍是從庫上查看,主要關注哪些參數

show slave status\G;

slave_IO_Running

slave_SQL_Running

1.5.3.15 說明一下目前線上mysql 集羣 的部署方案

MHA+atlas

Mycat+MGR

InnoDB cluster

PXC

MGC

1.5.3.16 用哪一個命令能夠對Mysql中的數據庫進行備份?

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql

source /tmp/backup.bak.sql

mysqldump

mysqldump -u 用戶名 -p 密碼 --databases 數據庫 1 數據庫 2 > xxx.sql

常見選項:

-u: 用戶名

-p: 密碼

-P: 端口號,不寫默認 3306

--all-databases, -A:備份全部數據庫

--databases, -B: 用於備份多個數據庫,若是沒有該選項,mysqldump 把第一個名字參數做爲數據庫

名,後面的做爲表名。使用該選項,mysqldum 把每一個名字都看成爲數據庫名。

-d: 只導出數據庫的表結構

-t: 只導出數據庫的數據

--quick, -q:快速導出

--xml, -X:導出爲 xml 文件

1.5.3.17 mysql的binlog有幾種,區別是什麼?mysql雙主複製原理是什麼?有什麼優勢和缺點?mysql如何進行增量備份?

binlog 的格式也有三種:STATEMENT、ROW、MIXED 。

一、STATMENT 模式:基於 SQL 語句的複製(statement-based replication, SBR),每一條會修改數據的

sql 語句會記錄到 binlog 中。

二、基於行的複製(row-based replication, RBR):不記錄每一條 SQL 語句的上下文信息,僅需記錄哪

條數據被修改了,修改爲了什麼樣子了。

三、混合模式複製(mixed-based replication, MBR):以上兩種模式的混合使用,通常的複製使用

STATEMENT 模式保存 binlog,對於 STATEMENT 模式沒法複製的操做使用 ROW 模式保存

binlog,MySQL 會根據執行的 SQL 語句選擇日誌保存方式。

雙主原理:

雙向的主從複製,也就是互爲對方的從服務器,每臺服務器便是對方的主服務器,又是對方的從服

務器

數據庫複製 replication 的實現原理

1:主服務器凡運行語句,都產生一個二進制日誌 binlog

2:從服務器不斷讀取主服務器的 binlog

3:從主服務讀取到的 binlog,轉換爲自身可執行的 relaylog,

4:執行 relaylog

1.5.3.18 簡述數據庫中全量備份、差別備份、事務日誌備份的恢復方式

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

mysqlbinlog -d test mysql-bin.000003 >003bin.sql

1.5.3.19 若是須要能夠回滾的修改如下sql語句,如何實現?

<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>

1.5.3.20 SAN方式高可用,你對這方面有了解嗎?

SAN(Storage Area Network)簡單點說就是能夠實現網絡中不一樣服務器的數據共享,

共享存儲可以爲數據庫服務器和存儲解耦。使用共享存儲時,服務器可以正常掛載文件系統並操

做, 若是服務器掛了,備用服務器能夠掛載相同的文件系統,執行須要的恢復操做,而後啓動 MySQL

1.5.3.21 mysqldump實現不鎖表的參數

mysqldump 備份不鎖表:加上--lock-tables=false 參數,

若是是 innodb,則加上--single-transcation 比較好。

1.5.3.22 MySQL數據庫的備份命令

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql

mysqldump -uroot -poldboy123 -B test >/temp/backup.bak.sql

1.5.3.23 MySQL的同步、半同步、一步同步主從複製有什麼區別

異步複製

異步複製,主庫將事務 Binlog 事件寫入到 Binlog 文件中,此時主庫只會通知一下 Dump 線程發

送這些新的 Binlog,而後主庫就會繼續處理提交操做,而此時不會保證這些 Binlog 傳到任何一個

從庫節點上。

全同步複製

全同步複製,當主庫提交事務以後,全部的從庫節點必須收到、APPLY 而且提交這些事務,而後主

庫線程才能繼續作後續操做。但缺點是,主庫完成一個事務的時間會被拉長,性能下降。

半同步複製

半同步複製,是介於全同步複製與全異步複製之間的一種,主庫只須要等待至少一個從庫節點收到

而且 Flush Binlog 到 Relay Log 文件便可,主庫不須要等待全部從庫給主庫反饋。同時,這裏只是

一個收到的反饋,而不是已經徹底完成而且提交的反饋,如此,節省了不少時間。

1.5.3.24 對於一個數據量較多的系統(數據庫10T,天天歸檔500g),您如何設計備份策略

每週 Full,天天 inc,或使用 DG、OGG

1.5.3.25 對於exp/imp和impdb/expdp邏輯備份的時候,有什麼方法提升效率

expdp/impdp 是服務端程序,影響它速度的只有磁盤 IO。

exp/imp 能夠在服務端,也能夠在客戶端。因此,它受限於網絡和磁盤

採用 direct path 能夠提升導出速度。 因此,在使用 exp 時,就能夠採用直接路徑模式。 這種模式有 2 個相關的參數:

DIRECT 和 RECORDLENGTH 參數。

DIRECT 參數定義了導出是使用直接路徑方式(DIRECT=Y),仍是常規路徑方式(DIRECT=N)。常規路徑導出使用 SQL SELECT

語句從表中抽取數據,直接路徑導出則是將數據直接從磁盤讀到 PGA 再原樣寫入導出文件,從而避免了 SQL 命令處理層的數

據轉換過程,大大提升了導出效率。在數據量大的狀況下,直接路徑導出的效率優點更爲明顯,可比常規方法速度提升三倍之

多。

和 DIRECT=Y 配合使用的是 RECORDLENGTH 參數,它定義了 Export I/O 緩衝的大小,做用相似於常規路徑導出使用的

BUFFER 參數。建議設置 RECORDLENGTH 參數爲最大 I/O 緩衝,即 65535(64kb)。其用法以下:

如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log

1.6 Oracle

1.6.1 選擇

1.6.1.1 若是一個服務器進程非正常終止,Orade系統將使用下列哪個進程來釋放它所佔用的資源?(D)

A.DBWR B.LGWR C.SMON D.PMON

1.6.1.2 下例選項中,哪一部分不是Orade 實例的組成部分?(B )

A.SGA系統全局區 B.控制文件 C.PMON 後臺進程 D.Dnnn 調度進程

1.6.1.3 Oracle 本地解析依賴那個文件(B)

A.sqlnet.ora B.listener.ora C.cman.ora D.tnsnames.ora

1.6.1.4 在Oracle中,當控制一個顯示遊標時,如下哪一個命令包含into子句?(C)

A.Open B.close C.fetch Dcursor

1.6.1.5 Oracle中要生成數據庫表,下列哪一個選項是無效表生產的語句?(D)

A.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))

B.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))

C.create global temporary table temp_cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))

D.create table 51cats as select c_name,c_weight from cats where c_weigth >5

1.6.1.6 在oracle中,當控制一個顯示遊標時,一下哪一個命令包含into子句?C

A.Open B.close C.fetch D.cursor

1.6.1.7 表中的數據能夠存爲一下那種文件格式(B)

A.PDF B.EXE C.TXT D.DMP

1.6.1.8 在全局存儲區SGA中,那個部份內存區域是循環使用的(B)

A數據緩衝區 B日誌緩衝區 C共享池 D大池

1.6.1.9 若是要查詢數據庫中全部表的信息,應當使用下列哪一種數據字典視圖? (A)O

A.DBA 視圖 B.ALL 視圖 C.USER 視圖 D.動態性能視圖

1.6.1.10 下列哪一項是Oracle數據庫中最小的存儲分配單元?( D)

A.表空間 B.段 C.盤區 D.數據塊

1.6.1.11 下面的各選項中哪一一個正確描述了Oracle數據庫的邏輯存儲結構? (A)O

A.表空間由段組成,段由盤區組成,盤區由數據塊組成

B.段由表空間組成,表空間由盤區組成,盤區由數據塊組成

C.盤區由數據塊組成,數據塊由段組成,段由表空間組成

D.數據塊由段組成,段由盤區組成,盤區由表空間組成

1.6.1.12 下列哪個進程用於將修改過的數據從內存保存到磁盤數據文件? (A

A.DBWR B.LGWR C.RECO D.ARCH

1.6.1.13 解忙後的SOL語句在SGA的哪一個區域中進行緩存?(C)

A數據緩衝區 B日誌緩衝區 C共享池 D大池

1.6.1.14 當數據庫運行在歸檔模式下時,若是發生目志切換,爲了保證不覆蓋舊的日誌信息系統將啓動以下哪一個進程?D

A.DBWR B.LGWR C.SMON D.ARCH

1.6.1.15 PL/SQL代碼段中註釋 符號是A

A// B\ C- D,

1.6.1.16 (C)模式存儲數據庫中數據字典的表和視圖

A 、DBA B、SCOTT C、SYSTEM D、SYS

1.6.2 填空

1.6.2.1 從存儲結構的角度來講,Oracle數據庫可分爲——、——區塊段

1.6.2.2 要更新遊標結果集中的當前行,應使用__FOR MODIFY 子句

1.6.2.3 Oracle查看錶空間狀況使用哪一個數據字典_______ dba_tablespces_v$tablespace _______

1.6.2.4 Oracle 備份工具(包括導入導出)_____ _____ _____ (exp___ _imp__expdp impdp rman

1.6.2.5 Oracle下取得當前系統時間的代碼爲______select sysdate from dual;

1.6.2.6 PL/SQL塊中不能直接使用的SQL命令是____DDL trong

1.6.3 簡答

1.6.3.1 在ORACLE 中用SQL 語句備份表A,備份表名爲B。

1.6.3.2 往oracle 插入數據超時,root 用戶下如何排查故障節點,描述從新啓動oracle 服務過程

一、startup nomount

這個階段,Oracle 進程讀取初始參數文件,查看 Oracle 數據庫的參數是如何配置的。好比內存

大小配置參數等。讀取參數文件後,與數據庫相關的內存區域被創建起來,同時,後臺進程也已經

開始啓動。咱們把這些內存和進程叫作 Oracle instance,一旦 Oracle Instance 啓動成功,數據庫就進

入了 NoMount 階段。

二、Mount

啓動到這個階段時,會打開和讀取控制文件,控制文件是二進制文件,記錄着 Oracle 的重要

信息,例如,數據文件的路徑等。

這個階段,Oracle 肯定數據文件的位置,可是尚未打開這些文件,一旦數據文件的路徑被定

位後,數據庫開始進入下一階段。

三、Open這個階段,Oracle 會讀取全部的數據文件,而且肯定這些數據文件是一致的(consistent)。

1.6.3.3 Oracle表空間,單個數據文件最大支持存儲多少G數據,索引須要重建嗎,何時須要重建索引

32G

1.6.3.4 請寫出unix系統中oracle數據庫啓、停命令

啓動:startup

中止:shutdown immediate

1.6.3.5 請描述oracle數據庫備份方式

Oracle 備份包括邏輯備份和物理備份。

1.邏輯備份 數據庫的邏輯備份包含讀一個數據庫記錄集和將記錄集寫入文件。

(1)輸出(Export)輸出能夠是整個數據庫、指定用戶或指定表。

(2)輸入(Import)輸入將輸出創建的二進制轉儲文件讀入並執行其命令。

2.物理備份 物理備份包含拷貝構成數據庫的文件而無論其邏輯內容。

Oracle 支持兩種不一樣類型的物理文件備份:脫機備份(offline backup)和聯機備份(online

backup)。

(1) 脫機備份 脫機備份用在當數據庫已正常關閉,數據庫處於"offline"時,要備份下列文件

全部數據文件 全部控制文件

1.6.3.6 Oracle如何實現數據庫的優化

一、調整數據結構的設計。這一部分在開發信息系統以前完成,程序員須要考慮是否使用 ORACLE

數據庫的分區功能,對於常常訪問的數據庫表是否須要創建索引等。

二、調整應用程序結構設計。這一部分也是在開發信息系統以前完成,程序員在這一步須要考慮應用

程序使用什麼樣的體系結構,是使用傳統的 Client/Server 兩層體系結構,仍是使用

Browser/Web/Database 的三層體系結構。不一樣的應用程序體系結構要求的數據庫資源是不一樣的。

三、調整數據庫 SQL 語句。應用程序的執行最終將歸結爲數據庫中的 SQL 語句執行,所以 SQL 語

句的執行效率最終決定了 ORACLE 數據庫的性能。ORACLE 公司推薦使用 ORACLE 語句優化器

(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化 SQL 語句。

1.6.3.7 備份如何分類

邏輯備份與物理備份。或者冷備份與熱備份。

1.6.3.8 你最擅長的是oracle那部分

性能優化、故障修復, RAC,DG,OGG,遷移

1.6.3.9 喜歡oracle嗎?喜歡上論壇嗎?或者偏好oracle的那一部分

官方文檔,MOS 等;性能優化、故障修復, RAC,DG,OGG,遷移

1.6.3.10 隨意說說你以爲oracle最有意思的部分或者最困難的部分

SQL 調優

1.6.3.11 Oracle的回滾段的做用是什麼

保存數據的前像,保證數據讀取的時間點一致性。Oracle 裏數據的多版本特性就是經過回滾段來實

現的,正由於此,Oracle 數據庫實現了讀寫不競爭的性能優點!

1.6.3.12 oracle的日只有哪幾種,做用是什麼

Alert log files--警報日誌,

Trace files--跟蹤日誌(用戶和進程),

redo log 重作日誌(記錄數據庫的更改)

歸檔 保存 redo

1.6.3.13 oracle進程主要有哪些,做用是什麼

pmon smon dbwr lgwr arch lisner

1.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):獨立訪問使用

數字越大鎖級別越高, 影響的操做越多。

通常的查詢語句如 select ... from ... ;是小於 2 的鎖, 有時會在 v$locked_object 出現。

select ... from ... for update; 是 2 的鎖。

當對話使用 for update 子串打開一個遊標時,

全部返回集中的數據行都將處於行級(Row-X)獨佔式鎖定,

其餘對象只能查詢這些數據行,不能進行 update、delete 或 select...for update 操做。

insert / update / delete ... ; 是 3 的鎖。

沒有 commit 以前插入一樣的一條記錄會沒有反應,

由於後一個 3 的鎖會一直等待上一個 3 的鎖, 咱們必須釋放掉上一個才能繼續工做。

建立索引的時候也會產生 3,4 級別的鎖。

locked_mode 爲 2,3,4 不影響 DML(insert,delete,update,select)操做,

但 DDL(alter,drop 等)操做會提示 ora-00054 錯誤。

有主外鍵約束時 update / delete ... ; 可能會產生 4,5 的鎖。

DDL 語句時是 6 的鎖。

以 DBA 角色, 查看當前數據庫裏鎖的狀況能夠用以下 SQL 語句:

select object_id,session_id,locked_mode from v$locked_object;

select t2.username,t2.sid,t2.serial#,t2.logon_time

老男孩教育-Linux 學院-微信:lidao996(加上備註)37

from vlockedobjectt1,vsession t2

where t1.session_id=t2.sid order by t2.logon_time;

若是有長期出現的一列,多是沒有釋放的鎖。

咱們能夠用下面 SQL 語句殺掉長期沒有釋放非正常的鎖:

alter system kill session 'sid,serial#';

若是出現了鎖的問題, 某個 DML 操做可能等待好久沒有反應。

當你採用的是直接鏈接數據庫的方式,

也不要用 OS 系統命令 killprocessnum 或者 kill -9 process_num 來終止用戶鏈接,

由於一個用戶進程可能產生一個以上的鎖, 殺 OS 進程並不能完全清除鎖的問題。

記得在數據庫級別用 alter system kill session 'sid,serial#';殺掉不正常的鎖。

1.6.3.15 oracle的Dataguard有哪幾種模式,各有什麼差異

DataGuard 有三種模式:

1.最大性能

這是 Data Guard 默認的保護模式。primay 上的事務 commit 前不須要從 standby 上收到反饋信息,該

模式在 primary 故障時可能丟失數據,但 standby 對 primary 的性能影響最小。

2.最大可用

在正常狀況下,最大可用模式和最大保護模式同樣;在 standby 不可用時,最大可用模式會自動降

低成最大性能模式,因此 standby 故障不會致使 primay 不可用。只要至少有一個 standby 可用的狀況

下,即便 primary down 機,也能保證不丟失數據。

3.最大保護

最高級別的保護模式。primay 上的事務在 commit 前必須確認 redo 已經傳遞到至少一個 standby 上,

若是全部 standby 不可用,則 primary 會掛起。該模式能保證零數據丟失, 通常爲保證主庫在某個從

庫故障後仍能正常運行,最好配置兩個及以上的從庫。

1.6.3.16 oracle冷備與熱備的區別

熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工做狀態時進行備份。

而冷備份指在數據庫關閉後,進行備份,適用於全部模式的數據庫。

熱備份的優勢在於當備份時,數據庫仍舊能夠被使用而且能夠將數據庫恢復到任意一個時間點。

冷備份的優勢在於它的備份和恢復操做至關簡單,而且因爲冷備份的數據庫能夠工做在非歸檔模式

下,

數據庫性能會比歸檔模式稍好。(由於沒必要將 archive log 寫入硬盤)

1.7 Redis

1.7.1 簡答

1.7.1.1 簡述redis與DB的交互機制

1.7.1.2 redis服務器的鏈接命令是什麼?

1.7.1.3 Redis默認跑什麼端口?使用命令行鏈接redis的默認命令是什麼?

1.7.1.4 redis實現主從使用什麼命令?

1.7.1.5 是否維護過redis集羣,使用什麼技術實現的集羣?

1.7.1.6 查看redis存活狀態及key個數的命令,redis cluster寫操做步驟

1.8 Mongodo

1.8.1 簡答

1.8.1.1 Mongodb忘記admin密碼的解決方法(或mysql忘記root密碼)

1.9 SQL sever

1.9.1 選擇

1.9.1.1 在SQL Server數據庫中,你想獲得在products表中最貴的產品的產品名稱(Productname)和產品價格(Price),應該使用的SQL查詢語句是____AC______

SELECT TOP 1 Productname,Price FROM Products ORDER BY Price desc

SELECT Productname,MAX(price) FROM Products

SELECT Productname

1.9.1.2 SQL Server是一種(C)軟件

A操做系統 B語言處理 C數據庫管理系統 D服務性程序

1.9.1.3 SQL Server數據庫的主數據文件的擴展名爲(BD)

A.sql B.mdf C.mdb D.ldf

1.9.1.4 關於sql server 經常使用的數據類型,如下(C)說法是錯誤的

A.Image 數據類型能夠用來存儲圖像 B.使用字符數據類型時,能夠改變長度信息

C.使用數字數據類型時,能夠改變長度信息 D.Bit數據類型爲1位長度,能夠存儲表示是/否的數據

1.9.1.5 使用T-SQL中的(D)語句能夠刪除數據表格或者視圖中的一個或多個記錄

A.DEL B.PRUGE C.DELETE D.DROP

1.9.1.6 使用T-SQL對數據的修改是經過(D)語句實現的

A.MODIFY B.EDIT C.REMAKE D.UPDATE

1.9.1.7 下列關於SQL Server數據庫日誌的說話錯誤是(D)

日誌文件是維護數據庫完整性的重要工具 有的對SQL數據庫的操做都須要寫日誌

當日志文件的空間佔滿時,將沒法寫日誌 當修改數據庫時,必先寫日誌

1.9.2 填空

1.9.2.1 sqlserver數據庫,如何限制不一樣人員的訪問權限

根據須要授予角色權限

主數據庫文件的擴展名是__mdf___,事務日誌文件的擴展名是__ldf__

1.9.2.2 SQL Server下取得當前系統時間的代碼爲_____select GETDATE()__ ___

1.9.2.3 將SQL Server數據複製到其餘的數據庫中,包括Access、Oracle、DB2等,採用__ODBC 做爲鏈接機制

1.9.2.4 SQL Server可以識別兩種登陸認證機制--Windows認證和_____SQL SERVER 認證

1.9.2.5 SQL Server默認的數據庫系統管理員的用戶名是2005 之前默認是:sa,2008 之後是安裝時

設置的,默認爲本機的名字___

1.9.2.6 在SQL Server中定義字符型,不論char(n)格式仍是varchar(n)格式,其數據長度均不能超過__8000字節

1.9.2.7 在SQL Server表中,一個表只能有一個___主鍵__,且其值必須惟一

1.9.2.8 在SQL Server中,一根數據庫至少包含___數據庫主__文件和___日誌__文件

1.9.2.9 SQL Server提供了四種數據庫備份方式:數據庫備份、日誌備份、__差別___備份以及文件或文件組備份

1.9.2.10 在檢索信息時能夠經過WHERE字句指定檢索的條件,並且SQL Server還提供了NOT、OR和__and三種運算符

1.9.3 簡答

1.9.3.1 SQL-SERVER2008有幾種認證方式?這幾種認證方式有什麼區別?

一、Windows 身份驗證和 SQL 身份驗證都是數據庫身份驗證的一種,身份驗證是用以識別數據的操

做者身份。無論使用哪一種身份驗證,只要具備數據庫或表的相關權限,那麼都可以對數據庫及表進

行相關的權限範圍以內的增刪查改的操做,所操做後的數據都是相互影響;

二、Windows 身份驗證和 SQL 身份驗證的區別不是權限,由於無論是 Windows 用戶(包括服務器本

地用戶及活動目錄用戶)仍是 SQL 用戶,都須要在 SQL 管理器中進行授予權限後,才能在權限範

圍以內操做。樓上所說的 windows 用戶登陸默認 windows 管理員爲數據庫的管理員,這種說法是錯

誤的,SQL2008 在安裝時,會讓你添加至少一個 SQL 管理員,通常來講都會添加當前的 Windows

用戶爲默認的數據庫管理員,固然也能夠添加其它任何 Windows 用戶做爲數據庫管理員(並非

Windows 管理員就會是數據庫管理員),在此也能夠決定是否啓用 SQL 身份驗證,若是啓用,那麼

則須要爲 SQL 用戶 SA 設置一個密碼。

那麼區別在於,一個使用 SQL 單獨用戶,一個使用 Windows 用戶,使用 Windows 用戶能夠極大的

方便管理員的管理,統一用戶身份驗證(通常使用活動目錄用戶,在實踐環境中,通常企業都會有

本身的活動目錄,若是使用 SQL 用戶的話,管理員則須要記憶和維護兩套用戶名及密碼,在這種情

況下就會使用 Windows 用戶,SQL 能夠直接調用 Windows 用戶並授予數據庫及表相關權限。那麼

在有權限的狀況下,管理員能夠直接使用本身的域用戶來登錄鏈接 SQL 數據庫)

老男孩教育-Linux 學院-微信:lidao996(加上備註)40

老男孩教育-Linux 學院-微信:lidao996(加上備註)

三、只要有相關的權限,所登錄到的數據固然是同樣,前面已經說過,身份驗證是用以識別數據的操

做者身份,那麼無論以何種身份登錄,只要具備相關權限,那麼都可以對數據庫及表進行相關的權

限範圍以內的增刪查改的操做。

1.9.3.2 SQL-SERVER2008中,使用一個有標的具體步驟有哪些?

1.用下面的語句選出所的表名:

select name from DBName.Sysobjects where xtype='U'

將上面的 DBName 替換成你的數據庫名。

2.經過 Excel 及 UltraEdit 等 工具,把按下面的語句替換 表名 ,生成一系列的修改語句。

增長一個 IDKEY 字段

ALTER TABLE 表名 ADD idkey bigint identity(1,1);

alter table 表名 add constraint pk_表名 primary key (idkey) ;

3.執行這些語句

相關文章
相關標籤/搜索