一、MySQL官方文檔地址
https://dev.mysql.com/doc/refman/5.7/en/
二、MySQL常用命令
1、如何登陸MySQL數據庫
mysql -u username -p
2、如何開啓/關閉mysql服務
service mysql start/stop
3、查看mysql的狀態
service mysql status
4、如何顯示數所有數據庫
show databases
5、如何獲取表內所有字段對象的名稱和類型
describe table_name;
三、SQL分類
SQL全程爲Structure Query Language(結構化查詢語言)。
SQL 語句主要可以劃分爲以下 3 個類別:
1、DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、 數據庫、表、列、索引等數據庫對象的定義。常用的語句關鍵字主要包括 create、drop、alter 等。
2、DML(Data Manipulation Language)語句:數據操縱語句,用於添加、刪除、更新和查詢數據庫記錄,並檢查數據完整性,常用的語句關鍵字主要包括 insert、delete、update 和 select 等。
3、DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和 訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要的語句關鍵字包括 grant、revoke 等。
四、MySQL使用幫助命令
在 MySQL 使用過程中,快速查找某一個命令的使用方法和實例。使用命令:
mysql> ? contents;
示例:
1、mysql> ? Data Types;
2、mysql> ? show create table;
3、mysql> ? show
4、mysql> ? int
。。。。。。
因此,只要是對於某一個命令不是很熟的話,使用? 命令名稱
即可顯示其用法。
五、MySQL支持的數據類型
1、數值類型
常見的數值類型如下:
注:這裏的最小值和最大值代表的是寬度。
對於這幾種常見的數值類型,我們應該知道存儲的所佔的字節,我們還要知道INT最大的長度爲10位數字,那麼我們設置11爲,如:int(11)也是無用的,最多隻能爲10位數字。TINYINT最大支持3位,那麼我們設置tinyint(4)也是無用的。
2、日期時間類型
上圖可以看出,每種日期時間類型都有一個有效值範圍,如果超出這個範圍,在默認的SQLMode下,系統會進行錯誤示,並將以零值來進行存儲。不同日期類型零值的表示如下:
提示:
(1)日期格式中只有TIMESTAMP
可以使用MySQL提供的函數,實現自動設置時間和自動更新時間,腳本如下:
`create_time` timestamp DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP ,
(2)Navicat for MqlSQL設置如下:
(3)使用TIMESTAMP
要認識到,他會停止在2038年的一個時刻,但MySQL官方應該後期會提供相應的支持。
(4)DATETIME、TIMESTAMP都可以精確到秒,但是TIMESTAMP
只佔4個字節,因此可以有效考慮使用;
3、字符串類型
1、常見的char和varchar區別:
(1)char(N)用於存放固定長度的字符串,長度最大爲255,比制定長度大的值將被截斷,而比指定長度小的值將會用空格進行填補;
(2)varchar(N)用於保存可變長度的字符串,長度最大爲65535,只存儲字符串實際需要的長度,它會增加一個額外字節來保存字符串本身的長度,varchar使用額外的1~2字節來存儲值得長度,如果列的最大長度小於或等於255,則使用1字節,否則就是使用2字節;
(3)char和varchar跟字符編碼也有密切聯繫,lantin1佔用1個字節,gbk佔用2個字節,utf8佔用3個字節。示例如下:
-
lantin1、1個字符1個字節:
-
gbk、1個字符2個字節:
-
utf8、1個字符3個字節:
2、如何選擇char和varchar
六、MySQL數據類型的選擇和優化案例
1、手機號存儲
使用BIGINT代替CHAR或者VARCHAR存放手機號碼。
這是因爲CHAR或者VARCHAR,佔用空間大,影響查詢性能。
例如:11位手機號CHAR存儲,utf8編碼,則佔用33個字節;
使用如果使用INT的話,INT最大隻能保存10爲數據,而手機號爲11位,會出現溢出,所以使用BIGINT佔用8個字節,支持11爲數據存儲。
2、IP地址可以使用INT存儲
MySQL裏提供了一個很好的函數:INET_ATON()
,他負責把IP地址轉化爲數字,而另一個函數INET_NTOA()
負責將數字轉化爲IP地址,示例如下:
注意:INT使用無符號,這是因爲INT有符號最大爲2147483647而無符號 最大爲4294967295,如果使用有符號的話,會出現溢出,使用無符號則不會溢出。
-
插入操作:
mysql> insert into test values(1,INET_ATON('192.168.1.213'));
-
選擇操作:
mysql> select id,INET_NTOA(ip) from test;
可以看出INT無符號最大值爲4294967295,而存放IP最大爲255.255.255.255剛好等於4294967295。
3、建議使用TINYINT來代替ENUM類型。
4、使用VARBINARY存儲大小寫敏感的變長字符串或二進制內容。
七、MySQL中的常用運算符
1、算術運算符
2、比較運算符
八、MySQL中的常用函數
1、字符串函數
2、數值函數
3、日期和時間函數
九、常見查看MySQL狀態命令
1、查看狀態
mysql> show status;
2、刷選狀態顯示
mysql> show global status like 'Max_used_connections';
3、查看可設置的變量
mysql> show variables\G;
4、查看最大的連接
mysql> show variables like '%max_con%';
5、查看進程的連接
mysql> show full processlist;
此命令在數據庫連接出現Too many connections解決的時候,很有幫助。
6、sql執行性能分析命令explain
在索引創建及分析很有幫助。