1.mysql如何做分頁
mysql數(shù)據(jù)庫做分頁用limit關(guān)鍵字串稀,然后后面跟兩個(gè)參數(shù)startindex和pageSize
limit分頁查詢:
select * from table_name limit 0,5 #:前五條數(shù)據(jù)
2.mysql存儲(chǔ)引擎有哪些除抛,各自特點(diǎn)是什么?
最主流用的比較多的是Innodb和myisam,memory安全沒有保障所以用的比較少
innodb和myisam兩個(gè)存儲(chǔ)引擎的區(qū)別母截?
innodb實(shí)現(xiàn)了sql標(biāo)準(zhǔn)的四種隔離制度
innodb支持事物到忽,myisam不支持
innodb支持外鍵,myisme不支持
innodb不支持全文索引微酬,myisam支持全文索引
innodb提供提交绘趋,回滾,和崩潰恢復(fù)能力的事物安全能力颗管,實(shí)現(xiàn)并發(fā)控制
myisam提供較高級(jí)的插入和查詢記錄的效率陷遮,主要用于插入和查詢
innodb引擎的適用場(chǎng)景
需要事物的處理操作,更新數(shù)據(jù)需要使用垦江,行級(jí)鎖大數(shù)據(jù)量的寫入大型互聯(lián)網(wǎng)
myisme引擎的適用場(chǎng)景
不需要事物操作插入帽馋,更新少,讀取頻繁比吭, 頻繁統(tǒng)計(jì)技數(shù)
3.數(shù)據(jù)庫如何建立索引
create index account_index on table name('字段名‘)
4.如何對(duì)應(yīng)對(duì)數(shù)據(jù)的高并發(fā)绽族,大量的數(shù)據(jù)計(jì)算
創(chuàng)建索引
數(shù)據(jù)庫讀寫分離,兩個(gè)數(shù)據(jù)庫一個(gè)讀一個(gè)寫
外鍵去掉
5.數(shù)據(jù)庫內(nèi)連表衩藤,右連表吧慢,左連表
內(nèi)連接是根據(jù)某一條件連接兩個(gè)表共有的數(shù)據(jù)
右連接是根據(jù)某一條件及右邊的表格連接數(shù)據(jù),左邊的表沒有數(shù)據(jù)的話則為null
左連接是根據(jù)某一條件及左邊的表格連接數(shù)據(jù)赏表,右邊的表沒有數(shù)據(jù)的話誒null
6.視圖和表的區(qū)別
視圖是已經(jīng)編譯好的sql語句检诗,是基于sql語句集的可視化表,而表不是視圖是窗口表示內(nèi)容
視圖沒有實(shí)際的物理記錄瓢剿,而表有
視圖的建立和刪除只是影響視圖的本身對(duì)表沒有什么影響
7.關(guān)系型數(shù)據(jù)庫的特點(diǎn)
數(shù)據(jù)集中控制
數(shù)據(jù)的獨(dú)立性好
數(shù)據(jù)的共享性好
數(shù)據(jù)結(jié)構(gòu)化
統(tǒng)一的數(shù)據(jù)保護(hù)能力
8.數(shù)據(jù)庫都有哪些索引
普通索引:普通索引就有一個(gè)功能:加速查找
唯一索引:唯一索引有兩個(gè)功能:加速查找和唯一約束(可含null)
外鍵索引:有兩個(gè)功能;加速查找和唯一約束(不可含null)
聯(lián)合索引:聯(lián)合索引將n個(gè)列組合成一個(gè)索引逢慌,應(yīng)用場(chǎng)景:同時(shí)使用n列進(jìn)行查詢
9.數(shù)據(jù)庫的存儲(chǔ)過程
存儲(chǔ)過程一般是作為獨(dú)立的部分來執(zhí)行,存儲(chǔ)過程是一個(gè)預(yù)編譯的sql語句间狂,存儲(chǔ)過程不允許執(zhí)行return語句攻泼,但是可以通過out返回多個(gè)值
程序與數(shù)據(jù)庫結(jié)合的三種方式
方式一:mysql存儲(chǔ)過程:調(diào)用存儲(chǔ)過程
方式二:mysql程序:純sql語句
方式三:mysql:程序類和對(duì)象,即orm(本質(zhì))
10.數(shù)據(jù)庫之sql優(yōu)化
select句中避免使用‘*’
減少訪問數(shù)據(jù)庫的次數(shù)
刪除重復(fù)的記錄
用where子句代替having子句
用where替代order by;
減少對(duì)表的查詢
11.char和vacher區(qū)別
char是固定長(zhǎng)度鉴象,存儲(chǔ)需要12個(gè)字節(jié)忙菠,處理速度比vachar快,費(fèi)內(nèi)存空間
vachar是不固定長(zhǎng)度纺弊,需要存儲(chǔ)13字節(jié)只搁,節(jié)約存儲(chǔ)空間
12.Mechached與redis
mechached:只是支持字符串,不能持久化俭尖,數(shù)據(jù)僅存在內(nèi)存中宕機(jī)或重啟數(shù)據(jù)將全部失效 不能進(jìn)行異步分布,文件無法異步法
優(yōu)點(diǎn):mechached進(jìn)程運(yùn)行后,會(huì)預(yù)先申請(qǐng)一塊比較大的內(nèi)存自己管理
redis:支持服務(wù)端的數(shù)據(jù)類型稽犁,redis與mechached相比較來說擁有更多的數(shù)據(jù)結(jié)構(gòu)并發(fā)支持更豐富的數(shù)據(jù)化操作可持久化
五大數(shù)據(jù)類型:string焰望,hash,list,set和有序集合,redis是單進(jìn)程的線程
缺點(diǎn):數(shù)據(jù)庫的容量受到物理限制已亥。
13.sql注入
sql注入是比較常見的攻擊方式之一熊赖,針對(duì)編程人員的疏忽,通過sql語句虑椎,實(shí)現(xiàn)賬號(hào)無法登陸震鹉,甚至篡改數(shù)據(jù)庫數(shù)據(jù)
防止:凡涉及到執(zhí)行sql中變量的時(shí)候,切記不要用字符串的拼接
14.什么是觸發(fā)器
觸發(fā)器是一種特殊的存儲(chǔ)過程捆姜,主要通過事件來觸發(fā)而被執(zhí)行的传趾,他可以強(qiáng)化約束,來維護(hù)數(shù)據(jù)的完整性和一致性泥技,可以跟蹤數(shù)據(jù)內(nèi)的操作從而不允許未經(jīng)許可的更新和變化可以連級(jí)運(yùn)算
只有表支持觸發(fā)器浆兰,視圖不支持觸發(fā)器
15,游標(biāo)是什么
是對(duì)查詢出來的結(jié)果作為單元有效處理,游標(biāo)可以定在該單元中的特定行珊豹,從結(jié)果集的當(dāng)前行檢索一行或多行簸呈,可以對(duì)結(jié)果集當(dāng)前行做修改,一般不使用游標(biāo)店茶,但是需要逐條處理數(shù)據(jù)的時(shí)候蜕便,游標(biāo)顯得很重要
16.數(shù)據(jù)庫支持多有標(biāo)準(zhǔn)的sql數(shù)據(jù)類型,重要分為三類
數(shù)值類型(tinyint,int,bigint,浮點(diǎn)數(shù)贩幻,bit)
字符串類型(char和vachar,enum,text,set)
日期類型(data,datetime,timestamp)
17.mysql慢查詢
慢查詢對(duì)于跟蹤有問題的查詢很有用轿腺,可以分析出當(dāng)前程序里那些sql語句比較消耗資源
慢查詢定義:指mysql記錄所有執(zhí)行超過long_query_time參數(shù)設(shè)定時(shí)間值的sql語句慢查詢?nèi)罩揪褪怯涗涍@些sql的日志
mysql在windows系統(tǒng)中的配置文件一般是my.ini找到mysqld
log-slow-queries = F:\MySQL\log\mysqlslowquery.log 為慢查詢?nèi)罩敬娣诺奈恢茫话阋锌蓪憴?quán)限 long_query_time = 2 2表示查詢超過兩秒才記錄
18.memcached命中率
命中:可以直接通過緩存獲取到需要的數(shù)據(jù)
不命中:無法直接通過緩存獲取到想要的數(shù)據(jù)段直,需要再次查詢數(shù)據(jù)庫或者執(zhí)行其他的操作吃溅,原因可能是由于緩存中根本不存在,或者緩存已經(jīng)過期
緩存的命中率越高則表示使用緩存的收益越高鸯檬,應(yīng)額用的性能越好决侈,抗病發(fā)能力越強(qiáng)
運(yùn)行state命令可以查看memcached服務(wù)的狀態(tài)信息,其中cmd—get表示總的get次數(shù)喧务,get—hits表示命中次數(shù)赖歌,命中率=get—hits / cmd—get
19.Oracle和mysql該如何選擇,為什么功茴?
他們都有各自的優(yōu)點(diǎn)和缺點(diǎn)庐冯,考慮到時(shí)間因素,我傾向于mysql
mysql開源
mysql輕便快捷
mysql對(duì)命令行和圖形界面支持都很好
mysql支持通過query browser進(jìn)行管理
20.什么時(shí)候建立索引坎穿?
經(jīng)常出現(xiàn)關(guān)鍵字order by group by ,distinct后面的字段展父,建立索引
在union等集合操作的結(jié)果集字段上返劲,建立索引,其建立索引的目的同上
為經(jīng)常用作表查詢選擇字段栖茉,建立索引
在經(jīng)常用作表連接的屬性上篮绿,建立索引
21.sql語句應(yīng)該考慮哪些安全
防止sql注入,對(duì)特殊字符進(jìn)行轉(zhuǎn)義吕漂,過濾或者使用預(yù)編譯的sql語句綁定變量
最小權(quán)限原則亲配,特別是不要用root賬戶,為不同的類型動(dòng)作或者組建使用不同賬戶
當(dāng)sql運(yùn)行出錯(cuò)時(shí)惶凝,不要把數(shù)據(jù)庫返回的報(bào)錯(cuò)信息全部顯示給用戶吼虎,以防止信息泄露服務(wù)器相關(guān)信息
22.數(shù)據(jù)庫事物有哪幾種
隔離性 持續(xù)性,一致性苍鲜,原子性
23.mysql數(shù)據(jù)表什么時(shí)候容易損壞思灰?
服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞
強(qiáng)制關(guān)機(jī),沒有先關(guān)閉mysql服務(wù)器等
24.drop,delete,與truncate的區(qū)別
drop直接刪除表
truncate刪除表中的數(shù)據(jù)坡贺,在插入時(shí)自增長(zhǎng)id又從1開始
delete刪除表中數(shù)據(jù)官辈,可以加where子句
25.數(shù)據(jù)庫范例
第一種范式:無重復(fù)的列
第二種范式:就是非主屬性非部分依賴關(guān)鍵字
第三種范式:就是屬性不依賴于其他非主屬性(消除沉余)
26.mysql鎖的類型
根據(jù)鎖的類型分:可以分為共享鎖、排他鎖遍坟、意向共享鎖和意向排他鎖
根據(jù)鎖的粒度分:可以分為行鎖拳亿、表鎖
對(duì)于mysql而言事務(wù)機(jī)制更多是靠底層的存儲(chǔ)引擎來實(shí)現(xiàn)的,因此愿伴,mysql層面只有表鎖肺魁,
而支持事物的innodb存儲(chǔ)引起則實(shí)現(xiàn)了行鎖(在行相應(yīng)的索引記錄上的鎖)
說明:對(duì)于更新操作(讀不上鎖),只有走索引才可能上行鎖
MVCC(多版本并發(fā)控制)并發(fā)控制機(jī)制下隔节,任何操作都不會(huì)阻塞讀取操作鹅经,
讀取操作也不會(huì)阻塞任何操作,只因?yàn)樽x不上鎖
共享鎖:由讀表操作加上的鎖怎诫,加鎖后其他用戶只能獲取該表或行的共享鎖瘾晃,不能獲取排他鎖,
也就是說只能讀不能寫
排他鎖:由寫表操作加上的鎖幻妓,加鎖后其他用戶不能獲取該表或該行的任何鎖蹦误,典型mysql事物中的更新操作
意向共享鎖(IS):事物打算給數(shù)據(jù)行加行共享鎖,事物在給一個(gè)數(shù)據(jù)行加共享鎖前必須先取得該表的IS鎖
意向排他鎖(IX):事物打算給數(shù)據(jù)行加行排他鎖肉津,事物在給一個(gè)數(shù)據(jù)行家排他鎖前必須先取得該表的IX鎖
27.如何解決mysql數(shù)據(jù)庫上的中文亂碼問題强胰?
在數(shù)據(jù)庫安裝的時(shí)候指定字符集
如果在按完了以后可以更改配置文件
建立數(shù)據(jù)庫的時(shí)候指定字符集的類型
建立表的時(shí)候也指定字符集
28.數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計(jì)
規(guī)劃
需求分析
概念模型設(shè)計(jì)
邏輯設(shè)計(jì)
物理設(shè)計(jì)
程序編制和調(diào)試
運(yùn)行和維護(hù)
29.索引概念
mysql索引也叫鍵,是存儲(chǔ)引擎用于快速查找到記錄的一種數(shù)據(jù)結(jié)構(gòu)索引對(duì)于良好的性能非常的關(guān)鍵妹沙,尤其是信息量比較大的時(shí)候
注意點(diǎn):不要對(duì)重復(fù)的值的字段建立索引偶洋,避免查詢mysql進(jìn)行自動(dòng)類型轉(zhuǎn)換,因?yàn)檗D(zhuǎn)換會(huì)讓索引不起作用
功能:
索引優(yōu)化是對(duì)查詢性能優(yōu)化的有效手段
索引能夠輕易將查詢性能提高好幾個(gè)數(shù)量級(jí)
索引相當(dāng)于字典的音序表距糖,如果要查那個(gè)就用音序表
特點(diǎn):創(chuàng)建和維護(hù)會(huì)消耗很多時(shí)間和磁盤空間玄窝,但查詢速度大大提高
30.Sqlalchemy
SQLAlchemy是一個(gè)基于Python實(shí)現(xiàn)的ORM框架牵寺。該框架建立在 DB API之上 ,使用關(guān)系對(duì)象映射進(jìn)行數(shù)據(jù)庫操作哆料,簡(jiǎn)言之便是:將類和對(duì)象轉(zhuǎn)換成SQL缸剪,然后使用數(shù)據(jù)API執(zhí)行SQL并獲取執(zhí)行結(jié)果。
SQLAlchemy本身無法操作數(shù)據(jù)庫东亦,其必須以來pymsql等第三方插件,Dialect
用于和數(shù)據(jù)API進(jìn)行交流唬渗,根據(jù)配置文件的不同調(diào)用不同的數(shù)據(jù)庫API典阵,從而實(shí) 現(xiàn)對(duì)數(shù)據(jù)庫的操作
31.請(qǐng)描述數(shù)據(jù)庫如何進(jìn)行多表查詢?
使用原生的sql語句
使用orm進(jìn)行查詢
嵌套查詢
使用子查詢
多表聯(lián)合查詢
聯(lián)合語句查詢
內(nèi)連接查詢
外連接查詢
利用IN或NOTIN關(guān)鍵字限定范圍
由In引入關(guān)聯(lián)子查詢
利用HAVING語句過濾分組數(shù)據(jù)