##概述
本節主要講解的知識有:
- 數據類型的使用。
- sql語句中的表達式。
- 聚合函數。
- 分頁。
- 排序。
- 分組。
- 主鍵,字段值唯一,不能爲null等設置。
- 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) |
說明:
- 選擇數據類型的原則是:在滿足取值範圍的前提下優先選擇佔用字節數小的。
- int數據類型與java中的int取值範圍相同,bigint數據類型與java中的long取值範圍相同。
- 實際開發中一般選擇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個字符 |
說明:
- 最常使用的數據類型是varchar,varchar後面可以指定字符長度,最多是6.5萬個。(注:是字符長度,不是字節長度,具體字節長度取決於編碼格式)
- char的儲存和查找效率都高於varchar。
- 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 '%張%三%';
##聚合函數
持續完善中。。。