1. 程式人生 > >MySQL學習(十二)

MySQL學習(十二)

MySQL的函式
1 數學函式
2 字串函式
3 日期和時間函式
4 條件判斷函式
5 系統資訊函式
6 加密解密函式
7 其他函式

2 字串函式
length計算的是位元組長度
char_length計算的是字元數

mysql> select tname,length(tname),char_length(tname) from t;

題目:某網站有email欄位存郵箱地址,想調查163,126,qq,gmail郵箱的比例

 select *,right(email,length(email)-position('@' in email)) from number;


可以修改表結構
把email拆成@前後2部分,放在兩個列

題目:
新建一個表,插入如下資料

統計每個周的加班時間

mysql> select sum(num),week(dt) as wk from overtime group by wk;

md5加密演算法
1 不可逆
2 碰撞性低

有沒用md5重複的不同字串哪?
答:有,但是尋找的過程,非常艱苦。

系統除錯函式
user()函式返回“使用者及所在的主機”,判斷自己的身份
database(),返回我當前正在操作的庫名
version() 檢視當前MySQL的版本號

如果MySQL函式和PHP函式都實現某個功能,優先用哪一個?
1 MySQL的函式肯定是要影響查詢速度,應該在建表時,通過合理的表結構減少函式的使用。比如email,按照@前後拆分
2 如果確實要用函式,比如時間的格式化,在MySQL裡用date_format,在php裡用date可以實現,優先放在業務邏輯層,即php層處理。
3 在查詢時使用了函式,最大的一個壞處,以date_fromat(A),則A列的索引將無法使用。
如果你針對某列查詢,而此列用上了函式判斷,此列將不再使用索引。
舉例

select name,email from table where right(position(email))='qq.com';

email列是有索引的,可以加快查詢速度,但因為你使用的並不是email列,而是函式處理後的email的返回值。因此,email列的查詢就非常緩慢了。
總結:where條件中,對某列使用了函式,則此列的索引不發揮作用。