博客 > SQL知識:SQL常見問題解答以及MySQL常見操作
瀏覽量:1229次評論:0次
作者:銳成網(wǎng)絡(luò)整理時間:2024-07-08 16:05:09
SQL作為一種結(jié)構(gòu)化查詢語言,主要用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。在了解SQL的時候,我們常常會遇到一些問題,比如char和varchar的區(qū)別、TRUNCATE和DELETE的區(qū)別等,今天我們收集整理了一些SQL常見問題解答以及MySQL常見操作,以下是相關(guān)內(nèi)容。
問題1:char、varchar的區(qū)別是什么?
varchar是變長而char的長度是固定的。如果你的內(nèi)容是固定大小的,你會得到更好的性能。
問題2: TRUNCATE和DELETE的區(qū)別是什么?
DELETE命令從一個表中刪除某一行,或多行,TRUNCATE命令永久地從表中刪除每一行。
問題3:什么是觸發(fā)器,MySQL中都有哪些觸發(fā)器?
觸發(fā)器是指一段代碼,當觸發(fā)某個事件時,自動執(zhí)行這些代碼。在MySQL數(shù)據(jù)庫中有如下六種觸發(fā)器:
問題4:FLOAT和DOUBLE的區(qū)別是什么?
FLOAT類型數(shù)據(jù)可以存儲至多8位十進制數(shù),并在內(nèi)存中占4字節(jié)。
DOUBLE類型數(shù)據(jù)可以存儲至多18位十進制數(shù),并在內(nèi)存中占8字節(jié)。
問題5:如何在MySQL種獲取當前日期?
SELECT CURRENT_DATE();
問題6:如何查詢第n高的工資?
SELECT DISTINCT(salary) from employee ORDER BY salary DESC LIMIT n-1,1
問題7:MySQL數(shù)據(jù)類型表達的意義(int(0)、char(16)、varchar(16)、datetime、text)
1、整數(shù)類型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分別表示1字節(jié)、2字節(jié)、3字節(jié)、4字節(jié)、8字節(jié)整數(shù)。任何整數(shù)類型都可以加上UNSIGNED屬性,表示數(shù)據(jù)是無符號的,即非負整數(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是有取值范圍的,并支持使用標準的浮點進行近似計算。 計算時FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串進行處理。
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ù)需要使用空格進行填充方便比較。 CHAR適合存儲很短的字符串,或者所有值都接近同一個長度。 CHAR存儲的內(nèi)容超出設(shè)置的長度時,內(nèi)容同樣會被截斷。
使用策略: 對于經(jīng)常變更的數(shù)據(jù)來說,CHAR比VARCHAR更好,因為CHAR不容易產(chǎn)生碎片。 對于非常短的列,CHAR比VARCHAR在存儲空間上更有效率。 使用時要注意只分配需要的空間,更長的列排序時會消耗更多內(nèi)存。 盡量避免使用TEXT/BLOB類型,查詢時會使用臨時表,導(dǎo)致嚴重的性能開銷。
4、枚舉類型(ENUM),把不重復(fù)的數(shù)據(jù)存儲為一個預(yù)定義的集合。 有時可以使用ENUM代替常用的字符串類型。 ENUM存儲非常緊湊,會把列表值壓縮到一個或兩個字節(jié)。 ENUM在內(nèi)部存儲時,其實存的是整數(shù)。 盡量避免使用數(shù)字作為ENUM枚舉的常量,因為容易混亂。 排序是按照內(nèi)部存儲的整數(shù)
5、日期和時間類型,盡量使用timestamp,空間效率高于datetime, 用整數(shù)保存時間戳通常不方便處理。 如果需要存儲微妙,可以使用bigint存儲。
答:int(0)表示數(shù)據(jù)是INT類型,長度是0、char(16)表示固定長度字符串,長度為16、varchar(16)表示可變長度字符串,長度為16、datetime表示時間類型、text表示字符串類型,能存儲大字符串,最多存儲65535字節(jié)數(shù)據(jù))
MySQL常見操作
MySQL的連接和關(guān)閉:mysql -u -p -h -P
進入MySQL命令行后:G、c、q、s、h、d
MySQL存儲引擎
1、InnoDB存儲引擎
默認事務(wù)型引擎,最重要最廣泛的存儲引擎,性能非常優(yōu)秀。
數(shù)據(jù)存儲在共享表空間,可以通過配置分開。也就是多個表和索引都存儲在一個表空間中,可以通過配置文件改變此配置。
對主鍵查詢的性能高于其他類型的存儲引擎。
內(nèi)部做了很多優(yōu)化,從磁盤讀取數(shù)據(jù)時會自動構(gòu)建hash索引,插入數(shù)據(jù)時自動構(gòu)建插入緩沖區(qū)。
通過一些機制和工具支持真正的熱備份。
支持崩潰后的安全恢復(fù)。
支持行級鎖。
支持外鍵。
2、MyISAM存儲引擎
擁有全文索引、壓縮、空間函數(shù)。
不支持事務(wù)和行級鎖、不支持崩潰后的安全恢復(fù)。
表存儲在兩個文件,MYD和MYI。
設(shè)計簡單,某些場景下性能很好,例如獲取整個表有多少條數(shù)據(jù),性能很高。
全文索引不是很常用,不如使用外部的ElasticSearch或Lucene。
3、其他表引擎, Archive、Blackhole、CSV、Memory
使用策略 在大多數(shù)場景下建議使用InnoDB存儲引擎。
重要聲明:本文來自SQL數(shù)據(jù)庫開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點,轉(zhuǎn)載的目的在于傳遞更多知識和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標簽選擇
閱讀排行
我的評論
還未登錄?點擊登錄