MySql(二)之高級使用

##概述

本節主要講解的知識有:

  1. 數據類型的使用。
  2. sql語句中的表達式。
  3. 聚合函數。
  4. 分頁。
  5. 排序。
  6. 分組。
  7. 主鍵,字段值唯一,不能爲null等設置。
  8. sql注入及防止sql注入的方法。

##數據類型的使用

數據庫中的數據類型很多,下面僅僅講解項目中常用的數據類型。

數據類型分爲四大類:整數,小數,字符串,時間。

一,整數

整數類型及佔用的字節數如下:

數據類型 佔用字節數(取值範圍)
tinyint(m) 1個字節(-128~127)
smallint(m) 2個字節(-2的16次方~2的16次方-1)
mediumint(m) 3個字節(-2的24次方~2的24次方-1)
int(m) 4個字節(-2的32次方~2的32次方-1)
bigint(m) 8個字節(-2的64次方~2的64次方-1)

說明:

  1. 選擇數據類型的原則是:在滿足取值範圍的前提下優先選擇佔用字節數小的。
  2. int數據類型與java中的int取值範圍相同,bigint數據類型與java中的long取值範圍相同。
  3. 實際開發中一般選擇int,如果int不滿足要求時再選擇bigint。對於僅僅表示類型的整數可以選擇binyint。

注意:int數據類型後面可以帶參數,如:


create table person (id int(11),name varchar(10));

此時的11並不表示字節的長度,也不表示取值範圍。因爲int類型以及決定了數據的長度和取值範圍。網上說11表示展示長度,但這個又有什麼實質意義呢?以後再詳細研究。

 

二,小數

小數類型及佔用的字節數如下:

數據類型 佔用字節數(取值範圍)
float(n,d) 單精度浮點型   4字節
double(n,d) 雙精度浮點型   8字節

說明:float和double的取值範圍分別與java中的float和double對應。

注:float和double後面可以根兩個參數,如下:

create table person (id int(11),price double(10,2));

此時10表示總數據位數,2表示小數位數,即整數位數是8.

三,字符串

字符串數據類型如下:

數據類型 說明
char(n) 固定長度,最多255個字符
varchar(n) 可變長度,最多65535個字符
tinytext 可變長度,最多255個字符
text 可變長度,最多65535個字符
mediumtext 可變長度,最多2的24次方-1個字符
longtext 可變長度,最多2的32次方-1個字符

說明:

  1. 最常使用的數據類型是varchar,varchar後面可以指定字符長度,最多是6.5萬個。(注:是字符長度,不是字節長度,具體字節長度取決於編碼格式)
  2. char的儲存和查找效率都高於varchar。
  3. text與varchar對比完全沒有優點,text不能設置索引,不能設置默認值。

四,時間類型

時間數據類型如下:

數據類型 說明:
date 日期,只包含年月日
time 時間,只包含時分秒
datetime 日期和時間
timestamp 日期和時間

最常用的是datetime和timestamp,下面說明這個數據類型的區別。

datetime存入的是時間,沒有時區的概念。timestamp是時間戳,同時間戳在不同時區對應不同時間。

datetime和timestamp的時間範圍不同。datetime是任意時間範圍。timestamp是1970年到2038年。

一般在操作當前時間時使用timestamp,操作歷史或者很遠的未來時間時使用datetime.

 

##sql語句中的表達式

在做查找,修改,刪除操作時往往需要where條件,在條件語句中需要有大於,小於,and,or等運算符,帶有運算符的sql語句稱爲表達式。

表達式分爲算法表達式和邏輯表達式。具體如下:

注:in後面的元素不能超過1000個。當元素太多時in的效率會很低,可以使用exist語句替代。

一,like的詳細使用

like是模糊查詢的關鍵詞。使用情況有如下三種:

--必須以張三開頭
select * from person where name like '張三%';
--必須以張三結尾
select * from person where name like '%張三';
--必須包含張三,且張與三緊挨着
select * from person where name like '%張三%';
--必須包含張三,且張在三的前面
select * from person where name like '%張%三%';

 

##聚合函數

持續完善中。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章