數據庫相關整理

一、MySQL

1、mysql如何做分頁

mysql數據庫做分頁用limit關鍵字,它后面跟兩個參數startIndex和pageSize


2、mysql引擎有哪些,各自的特點是什么?

http://www.cnblogs.com/ctztake/p/8453990.html


3、數據庫怎么建立索引

create index account_index on `table name `(`字段名`(length)


4、一張表多個字段,怎么創建組合索引

create index account_index on `table name `(`字段名`,'字段名')


5、如何應對數據的高并發,大量的數據計算

1.創建索引
2.數據庫讀寫分離,兩個數據庫,一個作為寫,一個作為讀
3. 外鍵去掉


4.django中orm表性能相關的


select_related:

對于一對一字段(OneToOneField)和外鍵字段(ForeignKey),可以使用select_related 來對QuerySet進行優化。

select_related主要針一對一和多對一關系進行優化。
select_related使用SQL的JOIN語句進行優化,通過減少SQL查詢的次數來進行優化、提高性能。
可以通過可變長參數指定需要select_related的字段名。也可以通過使用雙下劃線“__”連接字段名來實現指定的遞歸查詢。
沒有指定的字段不會緩存,沒有指定的深度不會緩存,如果要訪問的話Django會再次進行SQL查詢。
也可以通過depth參數指定遞歸的深度,Django會自動緩存指定深度內所有的字段。如果要訪問指定深度外的字段,Django會再次進行SQL查詢。
也接受無參數的調用,Django會盡可能深的遞歸查詢所有的字段。但注意有Django遞歸的限制和性能的浪費。
Django >= 1.7,鏈式調用的select_related相當于使用可變長參數。Django < 1.7,鏈式調用會導致前邊的select_related失效,只保留最后一個。

?

prefetch_related:

對于多對多字段(ManyToManyField)和一對多字段,可以使用prefetch_related()來進行優化。

prefetch_related()和select_related()的設計目的很相似,都是為了減少SQL查詢的數量,但是實現的方式不一樣。后者是通過JOIN語句,在SQL查詢內解決問題。
但是對于多對多關系,使用SQL語句解決就顯得有些不太明智,因為JOIN得到的表將會很長,會導致SQL語句運行時間的增加和內存占用的增加。若有n個對象,每個對象的多對多字段對應Mi條
,就會生成Σ(n)Mi 行的結果表。prefetch_related()的解決方法是,分別查詢每個表,然后用Python處理他們之間的關系。
因為select_related()總是在單次SQL查詢中解決問題,而prefetch_related()會對每個相關表進行SQL查詢,因此select_related()的效率通常比后者高。
鑒于第一條,盡可能的用select_related()解決問題。只有在select_related()不能解決問題的時候再去想prefetch_related()。
你可以在一個QuerySet中同時使用select_related()和prefetch_related(),從而減少SQL查詢的次數。
只有prefetch_related()之前的select_related()是有效的,之后的將會被無視掉

6、數據庫內連表、左連表、右連表

內連接是根據某個條件連接兩個表共有的數據
左連接是根據某個條件以及左邊的表連接數據,右邊的表沒有數據的話則為null
右連接是根據某個條件以及右邊的表連接數據,左邊的表沒有數據的話則為null

7、視圖和表的區別

視圖是已經編譯好的sql語句,是基于sql語句的結果集的可視化的表,而表不是
視圖是窗口,表示內容
視圖沒有實際的物理記錄,而表有

視圖是虛表,表是實表

視圖的建立和刪除只影響視圖本身,不影響對應的表

8、關系型數據庫的特點

數據集中控制
數據獨立性高
數據共享性好
數據冗余度小
數據結構化
統一的數據保護能力

?

9、mysql數據庫都有哪些索引

普通索引:普通索引僅有一個功能:加速查找
唯一索引:唯一索引兩個功能:加速查找和唯一約束(可含null)
外鍵索引:外鍵索引兩個功能:加速查找和唯一約束(不可為null)
聯合索引:聯合索引是將n個列組合成一個索引,應用場景:同時使用n列來進行查詢

?

觸發器

使用觸發器可以定制用戶對表進行【增、刪、改】操作時前后的行為,注意:沒有查詢

# 插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN...
END# 插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN...
END# 刪除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN...
END# 刪除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN...
END# 更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN...
END# 更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN...
END
View Code
#準備表
CREATE TABLE cmd (id INT PRIMARY KEY auto_increment,USER CHAR (32),priv CHAR (10),cmd CHAR (64),sub_time datetime, #提交時間success enum ('yes', 'no') #0代表執行失敗
);CREATE TABLE errlog (id INT PRIMARY KEY auto_increment,err_cmd CHAR (64),err_time datetime
);#創建觸發器
delimiter //
CREATE TRIGGER tri_after_insert_cmd AFTER INSERT ON cmd FOR EACH ROW
BEGINIF NEW.success = 'no' THEN #等值判斷只有一個等號INSERT INTO errlog(err_cmd, err_time) VALUES(NEW.cmd, NEW.sub_time) ; #必須加分號END IF ; #必須加分號
END//
delimiter ;#往表cmd中插入記錄,觸發觸發器,根據IF的條件決定是否插入錯誤日志
INSERT INTO cmd (USER,priv,cmd,sub_time,success
)
VALUES('egon','0755','ls -l /etc',NOW(),'yes'),('egon','0755','cat /etc/passwd',NOW(),'no'),('egon','0755','useradd xxx',NOW(),'no'),('egon','0755','ps aux',NOW(),'yes');#查詢錯誤日志,發現有兩條
mysql> select * from errlog;
+----+-----------------+---------------------+
| id | err_cmd         | err_time            |
+----+-----------------+---------------------+
|  1 | cat /etc/passwd | 2017-09-14 22:18:48 |
|  2 | useradd xxx     | 2017-09-14 22:18:48 |
+----+-----------------+---------------------+
rows in set (0.00 sec)插入后觸發觸發器
View Code

特別的:NEW表示即將插入的數據行,OLD表示即將刪除的數據行。

二 使用觸發器

觸發器無法由用戶直接調用,而知由于對表的【增/刪/改】操作被動引發的。

三 刪除觸發器

drop trigger tri_after_insert_cmd;

10、存儲過程

http://www.cnblogs.com/ctztake/p/7544559.html

存儲過程不允許執行return語句,但是可以通過out參數返回多個值,存儲過程一般是作為一個獨立的部分來執行,存儲過程是一個預編譯的SQL語句。

11、sql優化:

選取最適用的字段屬性

使用連接(JOIN)來代替子查詢(Sub-Queries)

select句中避免使用 '*'

減少訪問數據庫的次數
刪除重復記錄
用where子句替代having子句
減少對表的查詢
explain

12、char和vachar區別:

char是固定長度,存儲需要空間12個字節,處理速度比vachar快,費內存空間,當存儲的值沒有達到指定的范圍時,會用空格替代
vachar是不固定長度,需要存儲空間13個字節,節約存儲空間,存儲的是真實的值,會在存儲的值前面加上1-2個字節,用來表示真實數據的大小

13、Mechached與redis

mechached:只支持字符串,不能持久化,數據僅存在內存中,宕機或重啟數據將全部失效
不能進行分布式擴展,文件無法異步法。
優點:mechached進程運行之后,會預申請一塊較大的內存空間,自己進行管理。
redis:支持服務器端的數據類型,redis與memcached相比來說,擁有更多的數據結構和并發支持更豐富的數據操作,可持久化。
五大類型數據:string、hash、list、set和有序集合,redis是單進程單線程的。
缺點:數據庫的容量受到物理內存的限制。

14、sql注入

sql注入是比較常見的攻擊方式之一,針對編程員編程的疏忽,通過sql語句,實現賬號無法登陸,甚至篡改數據庫。
防止:凡涉及到執行sql中有變量時,切記不要用拼接字符串的方法


16、游標是什么?

是對查詢出來的結果集作為一個單元來有效的處理,游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行,可以對結果集當前行做修改,
一般不使用游標,但是需要逐條處理數據的時候,游標顯得十分重要

17、 數據庫支持多有標準的SQL數據類型,重要分為三類

數值類型(tinyint,int,bigint,浮點數,bit)
字符串類型(char和vachar,enum,text,set)
日期類型(date,datetime,timestamp)

枚舉類型與集合類型

18、mysql慢查詢

慢查詢對于跟蹤有問題的查詢很有用,可以分析出當前程序里哪些sql語句比較耗費資源
慢查詢定義:
指mysql記錄所有執行超過long_query_time參數設定的時間值的sql語句,慢查詢日志就是記錄這些sql的日志。
mysql在windows系統中的配置文件一般是my.ini找到mysqld
log-slow-queries = F:\MySQL\log\mysqlslowquery.log 為慢查詢日志存放的位置,一般要有可寫權限
long_query_time = 2 2表示查詢超過兩秒才記錄

19、memcached命中率

命中:可以直接通過緩存獲取到需要的數據
不命中:無法直接通過緩存獲取到想要的數據,需要再次查詢數據庫或者執行其他的操作,原因可能是由于緩存中根本不存在,或者緩存已經過期
緩存的命中率越高則表示使用緩存的收益越高,應額用的性能越好,抗病發能力越強
運行state命令可以查看memcached服務的狀態信息,其中cmd—get表示總的get次數,get—hits表示命中次數,命中率=get—hits / cmd—get

20、Oracle和MySQL該如何選擇,為什么?

他們都有各自的優點和缺點。考慮到時間因素,我傾向于MySQL
選擇MySQL而不選Oracle的原因
MySQL開源
MySQL輕便快捷
MySQL對命令行和圖形界面的支持都很好
MySQL支持通過Query Browser進行管理

21、什么情況下適合建立索引?

1.為經常出現在關鍵字order by、group by、distinct后面的字段,建立索引
2.在union等集合操作的結果集字段上,建立索引,其建立索引的目的同上
3.為經常用作查詢選擇的字段,建立索引
4.在經常用作表連接的屬性上,建立索引

22、數據庫底層是用什么結構實現的,你大致畫一下

底層用B+數實現,結構圖參考:
http://blog.csdn.net/cjfeii/article/details/10858721
http://blog.csdn.net/tonyxf121/article/details/8393545

23、sql語句應該考慮哪些安全性?

1.防止sql注入,對特殊字符進行轉義,過濾或者使用預編譯的sql語句綁定變量
2.最小權限原則,特別是不要用root賬戶,為不同的類型的動作或者組建使用不同的賬戶
3.當sql運行出錯時,不要把數據庫返回的錯誤信息全部顯示給用戶,以防止泄漏服務器和數據庫相關信息

24、數據庫事物有哪幾種?

隔離性、持續性、一致性、原子性

25、MySQ數據表在什么情況下容易損壞?

服務器突然斷電導致數據文件損壞
強制關機,沒有先關閉mysq服務器等

26、drop、delete與truncate的區別

當表被TRUNCATE?后,這個表和索引所占用的空間會恢復到初始大小,

DELETE操作不會減少表或索引所占用的空間。

?drop語句將表所占用的空間全釋放掉。

一、delete1、delete是DML,執行delete操作時,每次從表中刪除一行,并且同時將該行的的刪除操作記錄在redo和undo表空間中以便進行回滾(rollback)和重做操作,但要注意表空間要足夠大,
需要手動提交(commit)操作才能生效,可以通過rollback撤消操作。
2、delete可根據條件刪除表中滿足條件的數據,如果不指定where子句,那么刪除表中所有記錄。3、delete語句不影響表所占用的extent,高水線(high watermark)保持原位置不變。二、truncate1、truncate是DDL,會隱式提交,所以,不能回滾,不會觸發觸發器。2、truncate會刪除表中所有記錄,并且將重新設置高水線和所有的索引,缺省情況下將空間釋放到minextents個extent,除非使用reuse storage,。不會記錄日志,所以執行速度很快,
但不能通過rollback撤消操作(如果一不小心把一個表truncate掉,也是可以恢復的,只是不能通過rollback來恢復)。
3、對于外鍵(foreignkey )約束引用的表,不能使用 truncate table,而應使用不帶 where 子句的 delete 語句。4、truncatetable不能用于參與了索引視圖的表。三、drop1、drop是DDL,會隱式提交,所以,不能回滾,不會觸發觸發器。2、drop語句刪除表結構及所有數據,并將表所占用的空間全部釋放。3、drop語句將刪除表的結構所依賴的約束,觸發器,索引,依賴于該表的存儲過程/函數將保留,但是變為invalid狀態。

?

27、數據庫范式

1.第一范式:就是無重復的列
2.第二范式:就是非主屬性非部分依賴于主關鍵字
3.第三范式:就是屬性不依賴于其他非主屬性(消除冗余)

28、MySQL鎖類型

根據鎖的類型分:可以分為共享鎖、排他鎖、意向共享鎖和意向排他鎖
根據鎖的粒度分:可以分為行鎖、表鎖
對于mysql而言,事務機制更多是靠底層的存儲引擎來實現的,因此,mysql層面只有表鎖,
而支持事物的innodb存儲引起則實現了行鎖(在行相應的索引記錄上的鎖)
說明:對于更新操作(讀不上鎖),只有走索引才可能上行鎖
MVCC(多版本并發控制)并發控制機制下,任何操作都不會阻塞讀取操作,
讀取操作也不會阻塞任何操作,只因為讀不上鎖
共享鎖:由讀表操作加上的鎖,加鎖后其他用戶只能獲取該表或行的共享鎖,不能獲取排他鎖,
也就是說只能讀不能寫
排他鎖:由寫表操作加上的鎖,加鎖后其他用戶不能獲取該表或該行的任何鎖,典型mysql事物中的更新操作
意向共享鎖(IS):事物打算給數據行加行共享鎖,事物在給一個數據行加共享鎖前必須先取得該表的IS鎖
意向排他鎖(IX):事物打算給數據行加行排他鎖,事物在給一個數據行家排他鎖前必須先取得該表的IX鎖

29、如何解決MYSQL數據庫中文亂碼問題?

1.在數據庫安裝的時候指定字符集
2.如果在按完了以后可以更改配置文件
3.建立數據庫時候:指定字符集類型
4.建表的時候也指定字符集

30、數據庫應用系統設計

1.規劃
2.需求分析
3.概念模型設計
4.邏輯設計
5.物理設計
6. 程序編制及調試
7.運行及維護
ps:數據庫常見面試問題總結
https://yq.aliyun.com/wenji/

轉載于:https://www.cnblogs.com/buyisan/p/8641282.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453174.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

api接口怎么對接_系統對接項目管理方面怎么做?從一次項目接口對接說起

故事&#xff1a;最近業務方有一個新的業務合作模式&#xff0c;需要與第三方公司進行系統的對接&#xff0c;原本預期2周可以完成的項目&#xff0c;最后要用到3周時間才能完成&#xff0c;出現的現象其實還挺典型的&#xff0c;也不是沒遇到過&#xff0c;因為自己這邊的進度…

周轉時間 平均周轉時間 帶權周轉時間 平均帶權周轉時間

1.周轉時間 2.平均周轉時間 平均周轉時間是對n個而言的 3.帶權周轉時間 真正的運行時間指的是進程占有處理機的時間 4.平均帶權周轉時間 即n個平均的帶權周轉時間

程序員第一定律:關于技能與收入

在軟件這個行業里有些規則是很有殺傷力的&#xff0c;比如很有名的摩爾定律。 總結出這些規則的意義在于可以大致的照明方向&#xff0c;免得努力來努力去卻走到了陰溝里。 現實中種種利益紛爭、觀點之爭看似紛繁&#xff0c;但在大時間尺度下來看卻都是規則的實現手段。 這就好…

快速高效 | iOS身份證識別

一&#xff1a;簡介 demo新增身份證國徽面識別&#xff0c;可識別出簽發機關和有效期。 快捷支付涉及到方方面面&#xff0c;同時安全問題既是用戶所關心的&#xff0c;也是制作者不容忽視的重要部分。 比如涉及到支付和金錢的app&#xff0c;商戶端app等等&#xff0c;都需要進…

用計算機怎樣給文章分解,計算機試卷6分解..pdf

計算機試卷 6一、單選題1. 第三代計算機采用 ______ 作為主要的電子器件。A. 電子管B. 晶體管C.大規模集成電路D.小規模集成電路答案&#xff1a; D2. 數據是信息的載體&#xff0c;包括數值、文字、語言、圖形和 ______等不同形式。A. 多媒體B.表達式C. 圖像D. 函數答案&#…

unity應用開發實戰案例_「簡歷」STAR法則的實戰應用,附手把手教學案例

關注應屆生求職網&#xff0c;了解更多求職信息本文共2072字&#xff0c;預計閱讀需3分鐘本期分享導師-Anna_青云導師51Job職場導師知乎職場千贊答主多年獵頭及多行業人力資源管理經歷職業生涯規劃師、職業生涯咨詢師、心理咨詢師終身學習踐行者、斜杠青年、職場教練在簡歷優化…

一起看一下主流應用使用了哪些三方庫

背景 我們在進行Android開發時往往會面臨技術選型的問題, 面對如此多的開源框架如何進行選擇、選擇的標準是什么,這是一個值得思考的問題. 為此我在后臺爬取了6000多個主流應用,逐個反編譯統計它們使用了哪些開源框架,因此做了一個款應用 基本思路 首先我們要有Apk才可以進行分…

黑客——技術的凝聚者???

寫在前面&#xff1a; 不知道在中國&#xff0c;有多少人能真正的理解什么是hack,當hack被加上商業的成分就失去了本來的色彩&#xff0c;如今多如繁星的大小類黑客站點如雨后春筍般出現&#xff0c;不過是否有技術&#xff0c;統統叫hack&#xff0c;拿著別人的工具去砍掉幾個…

SOA架構設計經驗分享—架構、職責、數據一致性

1.背景介紹2.SOA的架構層次 2.1.應用服務&#xff08;原子服務&#xff09;2.2.組合服務2.3.業務服務&#xff08;編排服務&#xff09;3.SOA化的重構 3.1.保留服務空間&#xff0c;為了將來服務的組合4.運用DDDGRASP進行分析和設計&#xff08;防止主觀的判斷導致錯誤的假設&a…

計算機設備沒有音頻,電腦沒有音頻設備怎么辦

有些朋友的的電腦沒有聲音&#xff0c;任務欄右下角也沒有小喇叭聲音圖標&#xff0c;進入到控制面板里面的聲音選項里面去設置&#xff0c;在“音量”項目中顯示“沒有音頻設備”&#xff0c;很多朋友遇到這種情況不知道應該怎么解決&#xff0c;今天筆者就電腦沒有音頻設備怎…

HDLC協議概述

一 HDLC概述 1.1 HDLC的發展歷史 高級數據鏈路控制&#xff08;High-Level Data Link Control或簡稱HDLC&#xff09;&#xff0c;是一個在同步網上傳輸數據、面向比特的數據鏈路層協議&#xff0c;它是由國際標準化組織(ISO)根據IBM公司的SDLC(SynchronousData Link Control…

全志科技公司A83T Qt 支持雙屏顯示

目前A83T支持單屏顯示&#xff0c;首屏為LCD或者首屏為hdmi&#xff0c;都使用無論使用SCREEN0還是SCREEN1都是使用FB0作為framebuffer&#xff0c;在android下可以實現LCD和HDMI同樣屏幕顯示&#xff0c;而我們需要LCD和HDMI分別顯示。FrameBuffer采用的是linux下的framebuffe…

明日之后怎么跳過實名認證_明日之后寶箱達人活動怎么玩 明日之后寶箱達人可以開箱多少次...

《明日之后》寶箱達人是今天游戲中更新的活動&#xff0c;玩家們在部分的野外地圖中可以找到寶箱。很多玩家都想知道這個寶箱獲得的獎勵是什么。接下來就讓小編給大家帶來明日之后寶箱達人活動獎勵介紹&#xff0c;一起來看看吧。明日之后寶箱達人活動介紹 一、活動時間2020年9…

JVM內存模型與垃圾回收GC

Java開發有個很基礎的問題&#xff0c;雖然我們平時接觸的不多&#xff0c;但是了解它卻成為Java開發的必備基礎——這就是JVM。在C中我們需要手動申請內存然后釋放內存&#xff0c;否則就會出現對象已經不再使用內存卻仍被占用的情況。在Java中JVM內置了垃圾回收的機制&#x…

Windows批處理命令學習

Windows批處理命令學習一 Windows的批處理命令固然比不上unix的shell腳本強大&#xff0c;但用好了仍能給我們的工作帶來很大作用。一個朋友問我為什么學習批處理命令&#xff0c;我以《程序員修煉之道——從小工到專家》一書的一句話答復他&#xff1a;圖形界面的優點是所見即…

介質控制訪問為什么不適用多路復用技術來解決沖突

因為使用頻分多路復用或者時分多路復用會增加延遲時間&#xff0c;同時信道利用率也比較低

CAE所表示的計算機術語是,計算機應用中,英文縮略語CAE所表示的計算機術語是()。...

_剛果紅染色可呈紅色陽性反應的疾病有()。當管流過水斷面流速按拋物線規律分布時&#xff0c;管中水流為紊流。一般含硫量較低的石油多產自碳酸鹽巖系和膏巖系含油層。轉移因子屬于免疫()劑&#xff0c;適用于()。某客戶在南京分行營業部開立的一卡通憑證失磁/損壞&#xff0c;…

第 11 章 Paragraphs

目錄 11.1. para11.2. simpara11.3. formalpara11.4. bridgehead11.5. blockquote11.6. sidebar11.7. TM 商標 11.8. epigraph 題詞11.9. Font Formatting Codes11.9.1. strong11.9.2. bold11.9.3. italic11.9.4. literal11.9.5. remark11.1. para <para>helloworld</…

傷疤好了有黑印怎么辦_春藤家長圈|家有二孩,老大老二一起搶東西,家長該怎么辦?...

本期主講&#xff1a;齊靜美國G.T.I.認證父母效能訓練師高級家庭教育指導師未來春藤家長學院特聘講師(西安)五年一線幼兒教學從業經驗兩個孩子的媽媽每周一次的春藤家長圈線上案例分享時間到啦&#xff01;本周是我們線上案例分享的第十四期&#xff01;本周案例&#xff1a;本…