在基於mysql數據庫開發過程中,也許一些容易混淆的知識點沒有引起你的注意,但是往往這些細節被忽略的知識點會阻礙進行。總結一些mysql中容易混淆的知識點:
(1)mysql中char和varchar區別,特點
VARCHAR是一個可變長度字符串。
CHAR是一個定長的字符串。
首先我們在使用char或varchar時,必須指定長度.例如 Char(20) varchar(20)
如果存儲字符串長度爲5,那麼char就會在底層開闢20個長度來存儲長度爲5的字符串,而varchar會自動縮減,使用5個長度來存儲信息,可以節省空間.
注意:varchar它自動縮減,那麼性能會受影響,相對而言,char性能會更高一些。
========================================================================================================================== (2)TIMESTAMP與DATETIME類型區別
TIMESTAMP在進行insert操作時,如果沒有賦值,會取系統當前時間值。
如果對記錄進行update操作時,沒有處理TIMESTAMP字段,那麼它的值也會修改爲當前系統時間,從而記錄這條記錄修改時間。
DATETIME字段,如果沒有賦值,默認是就null.
==========================================================================================================================
(3)drop table 與delete from 及truncate table區別
若是在處理內容方面的不同:Drop table是用於刪除表結構。
Delete from刪除表中數據
Truncate table 也是用於刪除表中數據。
那麼同樣是刪除表內數據記錄的Delete與truncate table區別在哪裏?
①Delete from是一條一條記錄刪除.
Truncate table它的作用是先將表結構刪除,在重新創建表結構。
②兩者處理數據的方式不同,從而導致兩者在處理性能上的差異: 在刪除表中所有數據操作上,truncate的性能更高。
③事務上:
Delete是dml語句,受事務控制:以下之意就是在一個事務範圍控制內,若是delete from指定表中所有數據,通過回滾rollback可以恢復刪除的數據。
Truncate是dcl語句,不受事務控制.刪除表的記錄之後,通常就是不能通過事務回滾方式恢復表記錄。
===================================================================================================================================(4)having與where的區別
①where是在group by之前使用 而having是在group by之後使用
②where後面不可以使用分組函數,而having後面可以使用分組函數.
========================================================================================================================== (5)常見query關鍵字執行順序:select [..] from [table] where [conditions] group by [..] having [conditions] order by [...];
select 語句的解析順序:
①From 表:先執行from語句查詢指定表。 代表從哪張表中查詢數據【確定數據源】
②where條件:通過where關鍵字後的條件過濾一部分數據,將表中所有不符合條件記錄過濾。
③Group by:在得到的表記錄中,根據指定的字段進行分組。
④Having 條件:用於在分組後使用指定的條件對分組後的結果進行再過濾。
⑤Select :指定要查詢哪些數據【列屬性】,將那些列字段數據提取到結果集。
⑥Order by: 最後在根據指定的列字段對最後顯示地結果集進行排序。
====================================================================================================================================