mysql平台workb_MySQL 总结
164、數據庫的三范式是什么?
第一范式: 強調的是列的原子性,即數據庫表的每一列都是不可分割的原子數據項。
第二范式:要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分屬性。
第三范式: 任何非主屬性不依賴于其它非主屬性。
165、一張自增表里面有17條數據,刪除了最后兩條數據,重啟MySql數據庫,又插入了一條數據,此時Id是幾?
表類型如果是MyISAM,那id就是18.
表類型如果是InnoDB,那id就是16
因為InnoDB表只會把自增的最大Id記錄在內存中,所有重啟后導致最大Id丟失。
166、如何獲取當前數據庫的版本
使用select version()獲取當前MySql數據庫版本
167、說一下ACID是什么?
Actomicity原子性
Consistency 一致性
Isolation 隔離性
Durability 持久性
168、char和varchar的區別是什么?
char(n): 固定長度類型,比如char(10),當你輸入“abc”三個字符的時候,它們占用的空間是10個字符,其它7個是空字符。
char的優點: 效率高; 缺點:占用空間; 適用場景: 存儲密碼的md5值,固定長度的,適用char非常合適。
varchar(2):可變長度,存儲的值是每個值占用的字節再加上一個用來記錄其長度的字節的長度。
所以,從空間上考慮varchar比較合適,從效率上考慮char比較合適,二者使用需要權衡。
169、float和double的區別是什么?
float最多可以存儲8位的十進制,并在內存中占4個字節
double最多可以存儲16位十進制,并在內存中占8個字節。
170、MySql的內連接、左 連接、右連接有什么區別?
內連接關鍵字: inner join, 左連接: left join, 右連接: right join
內連接時把匹配的關聯數據顯示處理;
左連接是左邊的表全部顯示出來。
右連接與左連接正好相反。
171. MySQL索引的實現?
索引是滿足某種特定查找算法的數據結構,而這些數據結構以某種方式指向數據,從而實現高效查找數據。
具體來說MySQL中的索引,不同的數據引擎實現有所不同,但是目前主流的數據庫引擎的索引都是B+樹實現的,B+樹的搜索效率,可以達到二分法的性能,找到數據區域之后就能找到了完整的數據結構,索引索引的性能也更好。
172、怎么驗證MySql的索引是滿足需求的?
使用explain查看SQL是如何執行查詢語句的,從而分析你的索引是否滿足需求
explain語法:explain select * from table where type = 1
173、說一下數據庫的事務隔離?
MySQL的事務隔離是在MySQL.ini配置文件里添加的,在文件的最后添加
transaction-isolation=REPEATABLE-READ
可用的配置有READ-UNCOMMITED,READ-COMMITED,REPEATABLE-READ,SERIALIZABLE
READ-UNCOMMITED: 未提交讀,最低隔離級別、事務未提交前,就可被其它事務讀取。(會出現幻讀,臟讀,不可重復讀)
READ-COMMITED: 提交讀,一個事務提交后才能被其它事務讀取到(會造成幻讀和不可重復讀?)
REPEATABLE-READ: 可重復讀,默認級別,保證多次讀取同一個數據時,其值都和事務開始的內容一致,禁止讀取到被的事務未提交的數據。(會造成幻讀?)
SERIALIZABLE: 序列化,代價最高最可靠的隔離級別,該隔離級別能防止臟讀,不可重復讀,幻讀。
臟讀:表示一個事務能讀取另一個事務中未提交的數據。比如某個事務嘗試插入記錄A,此時事務還未提交,然后另一個事務嘗試讀取到了記錄A。
不可重復讀:是指在一個事務內,多次讀同一數據。
幻讀:指同一個事務內多次查詢返回的結果集不一樣。比如同一個事務A第一次查詢時候有n條記錄,但是第二次同等條件下查詢到有n+1條記錄,這就好像產生了幻覺。發生幻讀的原因也是另外一個事務新增或刪除或者修改了第一個事務結果集里面的數據,同一個記錄的數據內容被修改了,所有數據行的記錄就變多了或者變少了。
174、說一下MySQL常用的引擎?
InnoDB引擎:InnoDB引擎提供了對數據庫的acid事務支持,并且還提供了行級鎖和外鍵的約束,它的數據的目標就是處理大數據容量的數據庫系統。MySQL運行的時候,InnoDB會在內存中建立緩沖池,用于緩沖數據和索引。但是該引擎是不會支持全文搜索的,同時啟動也比較慢,它是不會保存表的行數的,所以當進行select cout(*) from table指令的時候,需要進行全表掃描。由于鎖的粒度小,寫操作不會鎖定全表的,索引在并發度高的場景下使用會提升效率。
MyIASM引擎:MySql的默認引擎,單不提供事務的支持,也不支持行級鎖和外鍵。因此當執行插入或更新操作時,即執行寫操作需要鎖定這個表,所以會導致效率降低。不過和InnoDB不同的是,MyIASM引擎保存了表的行數,于是當進行elect cout(*) from table指令的時候,可以直接的讀取已經保存的值而不需要進行全表掃描。所以,如果表的讀操作遠遠低于寫操作,并且不需要事務的支持的,可以將MyIASM作為數據庫引擎的首選。
175、說一下MySQL的行鎖和表鎖?
MyISAM只支持表鎖,InnoDB支持表鎖和行鎖,默認為行鎖。
表級鎖:開銷小,加鎖快,不會出現死鎖。鎖粒度大,發生鎖沖突的概率高,并發量最低
行級鎖: 開銷大,加鎖慢,會出現死鎖。鎖粒度小,發生鎖沖突的概率小,并發度最高。
176、說一下樂觀鎖和悲觀鎖?
樂觀鎖: 每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在提交更新的時候會判斷一下在此期間別人有沒有去更新這個數據。
悲觀鎖: 每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人都想拿這個數據就會阻止,直到這個鎖被釋放。
數據庫的樂觀鎖需要自己實現,在表里添加一個version字段,每次修改成功值會加1,這樣每次修改的時候先對比一下,自己擁有的version和數據庫現在的version是否一致,如果不一致就不修改,這樣就實現了樂觀鎖。
177、MySQL問題排查有哪些手段?
使用show processlist命令查看當前所有連接信息
使用explain命令查詢SQL語句執行計劃
開啟慢查詢日志,查看慢查詢的SQL
178、如何做MySQL的性能優化
為搜索字段創建索引
避免使用select *, 列出需要查詢的字段
垂直分割分表
選擇正確的存儲引擎。
總結
以上是生活随笔為你收集整理的mysql平台workb_MySQL 总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos 报错dts文件未导入_coc
- 下一篇: python爬虫qq音乐教学视频_爬取Q