MySQL必知必會知識點總結一二
一、MySQL官方文件地址
二、MySQL常用命令
1、如何登陸mysql資料庫
mysql -u username -p
1.1、指定IP、埠
mysql -uroot -h 192.168.1.213 -P3306 -p123456
-P(大寫):指定埠;
-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 NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
(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位元組;(1個位元組佔8位,2的8次方是256(-128~127);2個位元組佔16位,2的16次方為65536)
(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
在索引建立及分析很有幫助。