int类型存小数 mysql_2020年最新版MySQL面试题(一)
數(shù)據(jù)庫基礎(chǔ)知識
一、為什么要使用數(shù)據(jù)庫
1.數(shù)據(jù)保存在內(nèi)存
- 優(yōu)點:存取速度快
- 缺點:數(shù)據(jù)不能永久保存
2.數(shù)據(jù)保存在文件
- 優(yōu)點:數(shù)據(jù)永久保存
- 缺點:①速度比內(nèi)存操作慢,頻繁的IO操作;②查詢數(shù)據(jù)不方便。
3.數(shù)據(jù)保存在數(shù)據(jù)庫
①數(shù)據(jù)永久保存;②使用SQL語句,查詢方便效率高;③管理數(shù)據(jù)方便。
二、什么是SQL?
定義:結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,是一種數(shù)據(jù)庫查詢語言。
作用:用于存取數(shù)據(jù)、查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。
三、什么是MySQL?
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。在PHP企業(yè)級開發(fā)中非常常用,因為 MySQL 是開源免費的,并且方便擴(kuò)展。
四、數(shù)據(jù)庫三大范式是什么?
- 第一范式:每個列都不可以再拆分。
- 第二范式:在第一范式的基礎(chǔ)上,非主鍵列完全依賴于主鍵,而不能是依賴于主鍵的一部分。
- 第三范式:在第二范式的基礎(chǔ)上,非主鍵列只依賴于主鍵,不依賴于其他非主鍵。
在設(shè)計數(shù)據(jù)庫結(jié)構(gòu)的時候,要盡量遵守三范式,如果不遵守,必須有足夠的理由。比如性能。事實上我們經(jīng)常會為了性能而妥協(xié)數(shù)據(jù)庫的設(shè)計。
五、mysql有關(guān)權(quán)限的表都有哪幾個?
MySQL服務(wù)器通過權(quán)限表來控制用戶對數(shù)據(jù)庫的訪問,權(quán)限表存放在mysql數(shù)據(jù)庫里,由mysql_install_db腳本初始化。這些權(quán)限表分別user,db,table_priv,columns_priv和host。
下面分別介紹一下這些表的結(jié)構(gòu)和內(nèi)容:
- user權(quán)限表:記錄允許連接到服務(wù)器的用戶帳號信息,里面的權(quán)限是全局級的。
- db權(quán)限表:記錄各個帳號在各個數(shù)據(jù)庫上的操作權(quán)限。
- table_priv權(quán)限表:記錄數(shù)據(jù)表級的操作權(quán)限。
- columns_priv權(quán)限表:記錄數(shù)據(jù)列級的操作權(quán)限。
- host權(quán)限表:配合db權(quán)限表對給定主機(jī)上數(shù)據(jù)庫級操作權(quán)限作更細(xì)致的控制。這個權(quán)限表不受GRANT和REVOKE語句的影響。
六、MySQL的binlog有有幾種錄入格式?分別有什么區(qū)別?
有三種格式,statement,row和mixed。
- statement模式下,每一條會修改數(shù)據(jù)的sql都會記錄在binlog中。不需要記錄每一行的變化,減少了binlog日志量,節(jié)約了IO,提高性能。由于sql的執(zhí)行是有上下文的,因此在保存的時候需要保存相關(guān)的信息,同時還有一些使用了函數(shù)之類的語句無法被記錄復(fù)制。
- row級別下,不記錄sql語句上下文相關(guān)信息,僅保存哪條記錄被修改。記錄單元為每一行的改動,基本是可以全部記下來但是由于很多操作,會導(dǎo)致大量行的改動(比如alter table),因此這種模式的文件保存的信息太多,日志量太大。
- mixed,一種折中的方案,普通操作使用statement記錄,當(dāng)無法使用statement的時候使用row。
此外,新版的MySQL中對row級別也做了一些優(yōu)化,當(dāng)表結(jié)構(gòu)發(fā)生變化的時候,會記錄語句而不是逐行記錄。
數(shù)據(jù)類型
一、mysql有哪些數(shù)據(jù)類型?
1.整數(shù)類型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。
- 分別表示1字節(jié)、2字節(jié)、3字節(jié)、4字節(jié)、8字節(jié)整數(shù)。任何整數(shù)類型都可以加上UNSIGNED屬性,表示數(shù)據(jù)是無符號的,即非負(fù)整數(shù)。
- 長度:整數(shù)類型可以被指定長度。例如:INT(11)表示長度為11的INT類型。長度在大多數(shù)場景是沒有意義的,它不會限制值的合法范圍,只會影響顯示字符的個數(shù),而且需要和UNSIGNED ZEROFILL屬性配合使用才有意義。
- 例子。假定類型設(shè)定為INT(5),屬性為UNSIGNED ZEROFILL,如果用戶插入的數(shù)據(jù)為12的話,那么數(shù)據(jù)庫實際存儲數(shù)據(jù)為00012。
2.實數(shù)類型,包括FLOAT、DOUBLE、DECIMAL。
- DECIMAL可以用于存儲比BIGINT還大的整型,能存儲精確的小數(shù)。
- 而FLOAT和DOUBLE是有取值范圍的,并支持使用標(biāo)準(zhǔn)的浮點進(jìn)行近似計算。
- 計算時FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串進(jìn)行處理。
3.字符串類型,包括VARCHAR、CHAR、TEXT、BLOB。
- VARCHAR用于存儲可變長字符串,它比定長類型更節(jié)省空間。
- VARCHAR使用額外1或2個字節(jié)存儲字符串長度。列長度小于255字節(jié)時,使用1字節(jié)表示,否則使用2字節(jié)表示。
- VARCHAR存儲的內(nèi)容超出設(shè)置的長度時,內(nèi)容會被截斷。
- CHAR是定長的,根據(jù)定義的字符串長度分配足夠的空間。
- CHAR會根據(jù)需要使用空格進(jìn)行填充方便比較。
- CHAR適合存儲很短的字符串,或者所有值都接近同一個長度。
- CHAR存儲的內(nèi)容超出設(shè)置的長度時,內(nèi)容同樣會被截斷。
使用策略:
對于經(jīng)常變更的數(shù)據(jù)來說,CHAR比VARCHAR更好,因為CHAR不容易產(chǎn)生碎片。
對于非常短的列,CHAR比VARCHAR在存儲空間上更有效率。
使用時要注意只分配需要的空間,更長的列排序時會消耗更多內(nèi)存。
盡量避免使用TEXT/BLOB類型,查詢時會使用臨時表,導(dǎo)致嚴(yán)重的性能開銷。
4.枚舉類型(ENUM),把不重復(fù)的數(shù)據(jù)存儲為一個預(yù)定義的集合。
- 有時可以使用ENUM代替常用的字符串類型。
- ENUM存儲非常緊湊,會把列表值壓縮到一個或兩個字節(jié)。
- ENUM在內(nèi)部存儲時,其實存的是整數(shù)。
- 盡量避免使用數(shù)字作為ENUM枚舉的常量,因為容易混亂。
- 排序是按照內(nèi)部存儲的整數(shù)
5.日期和時間類型,盡量使用timestamp,空間效率高于datetime,用整數(shù)保存時間戳通常不方便處理。
- 如果需要存儲微妙,可以使用bigint存儲。
- 看到這里,這道真題是不是就比較容易回答了。
引擎
一、MySQL存儲引擎MyISAM與InnoDB區(qū)別
存儲引擎Storage engine:MySQL中的數(shù)據(jù)、索引以及其他對象是如何存儲的,是一套文件系統(tǒng)的實現(xiàn)。
常用的存儲引擎有以下:
- Innodb引擎:Innodb引擎提供了對數(shù)據(jù)庫ACID事務(wù)的支持。并且還提供了行級鎖和外鍵的約束。它的設(shè)計的目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫系統(tǒng)。
- MyIASM引擎(原本Mysql的默認(rèn)引擎):不提供事務(wù)的支持,也不支持行級鎖和外鍵。
- MEMORY引擎:所有的數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高。
二、MyISAM與InnoDB區(qū)別
三、MyISAM索引與InnoDB索引的區(qū)別?
- InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
- InnoDB的主鍵索引的葉子節(jié)點存儲著行數(shù)據(jù),因此主鍵索引非常高效。
- MyISAM索引的葉子節(jié)點存儲的是行數(shù)據(jù)地址,需要再尋址一次才能得到數(shù)據(jù)。
- InnoDB非主鍵索引的葉子節(jié)點存儲的是主鍵和其他帶索引的列數(shù)據(jù),因此查詢時做到覆蓋索引會非常高效。
四、InnoDB引擎的4大特性
- 插入緩沖(insert buffer)
- 二次寫(double write)
- 自適應(yīng)哈希索引(ahi)
- 預(yù)讀(read ahead)
五、存儲引擎選擇
如果沒有特別的需求,使用默認(rèn)的Innodb即可。
- MyISAM:以讀寫插入為主的應(yīng)用程序,比如博客系統(tǒng)、新聞門戶網(wǎng)站。
- Innodb:更新(刪除)操作頻率也高,或者要保證數(shù)據(jù)的完整性;并發(fā)量高,支持事務(wù)和外鍵。比如OA自動化辦公系統(tǒng)。
來源:https://blog.csdn.net/ThinkWon/article/details/104778621
總結(jié)
以上是生活随笔為你收集整理的int类型存小数 mysql_2020年最新版MySQL面试题(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 还原九宫格图片_用Pyth
- 下一篇: xampp mysqli_query a