日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库栏目_MySQL的一些小技巧(持续更新) - mysql数据库栏目

發布時間:2025/3/12 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库栏目_MySQL的一些小技巧(持续更新) - mysql数据库栏目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.巧用RAND()提取隨機行

在MySQL中,產生隨機數的方法是RAND()函數,可以利用這個函數與ORDER BY子句一起完成隨機抽取某些行的功能。它的原理其實就是ORDER BY RAND()能夠把數據隨機排序。

2.利用GROUP BY的WITH ROLLUP子句做統計

在SQL語句中,使用GROUP BY的WITH ROLLUP子句可以檢索出更多的分組聚合信息。它不僅能像一般的GROUP BY語句那樣檢索出各組的聚合信息,還能檢索出本組類整體聚合信息。當使用ROLLUP時,不能同時使用ORDER BY子句進行結果排序,因為它們兩者是互相排斥的。 WITH ROLLUP反映的是一個OLAP思想,也就是說這一個GROUP BY語句執行完成后可以滿足用戶想要得到的任何一個分組以及分組組合的聚合信息值。

3.MySQL中的一些函數

CONCAT(str1,str2,...) 返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。

mysql> SELECT CONCAT('My', 'S', 'QL');

-> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

-> NULL

mysql> SELECT CONCAT(14.3);

-> '14.3'

group_concat函數,將取得的值用逗號連接。

select group_concat(id) from table_name;

得到的結果是(1,2,3,4,5)

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 在第一個方案的返回結果中, value=compare-value。而第二個方案的返回結果是第一種情況的真實結果。如果沒有匹配的結果值,則返回結果為ELSE后的結果,如果沒有ELSE 部分,則返回值為 NULL。

IF(expr1,expr2,expr3)函數如果expr1為True,則返回expr2,否則返回expr3。 expr1 作為一個整數值進行計算,就是說,假如你正在驗證浮點值或字符串值, 那么應該使用比較運算進行檢驗。

mysql> SELECT IF(1>2,2,3);

-> 3

mysql> SELECT IF(1<2,'yes ','no');

-> 'yes'

mysql> SELECT IF(STRCMP('test','test1'),'no','yes');

-> 'no'

IFNULL(expr1,expr2) 假如expr1 不為 NULL,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr2。IFNULL()的返回值是數字或是字符串,具體情況取決于其所使用的語境。

mysql> SELECT IFNULL(1,0);

-> 1

mysql> SELECT IFNULL(NULL,10);

-> 10

mysql> SELECT IFNULL(1/0,10);

-> 10

mysql> SELECT IFNULL(1/0,'yes');

-> 'yes'

NULLIF(expr1,expr2) 如果expr1 = expr2 成立,那么返回值為NULL,否則返回值為 expr1。這和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。

mysql> SELECT NULLIF(1,1);

-> NULL

mysql> SELECT NULLIF(1,2);

-> 1

coalesce函數,返回參數中第一個不為空的值

select coalesce(a,b,c) from table_name;

如果a不為null,則選擇a;如果a為null ,則選擇b;如果b為null,則選擇c;如果a、b、c都為null,則返回null。

GREATEST(value1,value2,...) 當有2或多個參數時,返回值為最大(最大值的)參數。比較參數所依據的規律同LEAST()相同。

mysql> SELECT GREATEST(2,0);

-> 2

mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);

-> 767.0

mysql> SELECT GREATEST('B','A','C');

-> 'C'

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 若無參數調用,則返回一個Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒數) 作為無符號整數。若用date 來調用UNIX_TIMESTAMP(),它會將參數值以'1970-01-01 00:00:00' GMT后的秒數的形式返回。date 可以是一個DATE 字符串、一個 DATETIME字符串、一個 TIMESTAMP或一個當地時間的YYMMDD 或YYYMMDD格式的數字。

mysql> SELECT UNIX_TIMESTAMP();

-> 882226357

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');

-> 875996580

TO_DAYS(date) 給定一個日期date, 返回一個天數 (從年份0開始的天數 )。

mysql> SELECT TO_DAYS(950501);

-> 728779

mysql> SELECT TO_DAYS('1997-10-07');

-> 729669

MD5(str),返回字符串str的MD5值。常用于對應用中的數據進行加密。 select MD5('123456')

INET_ATON(IP地址),返回IP地址的網絡字節序表示 INET_NTOA(num),返回網絡字節序代碼的ip地址。

4.刪除表中的重復數據

在需要給表中某些字段加唯一索引時,而字段中又存在需要重復清理數據的問題,不少DBA都應該遇到過。一般在處理時總是想在數據庫中只保留一條,其他的刪除,但是這樣的SQL寫出來總是效率不高,怎么辦?其實可以轉換思路,把重復的都選出一條出來,存到一張臨時表,然后刪除原表中所有存在重復的,再把臨時表的數據庫全部插入原庫,這是比較通用并且高效的做法。

5.大量數據導入MySQL數據庫加快速度

對于MyISAM存儲引擎的表,可以通過以下方式快速的導入大量的數據。

ALTER TABLE tbl_name DISABLE KEYS;

loading the data

ALTER TABLE tbl_name ENABLE KEYS;

DISABLE KEYS和ENABLE KEYS用來打開或者關閉MyISAM表非唯一索引的更新。

InnoDB因為主鍵聚集索引的關系,如果沒有主鍵或者主鍵非序列的情況下,導入會越來越慢,如何快速的遷移數據到InnoDB?借助MyISAM的力量是很靠譜的。先關閉InnoDB的Buffer Pool,把內存空出來,建一張沒有任何索引的MyISAM表,然后只管插入吧,concurrent_insert=2,在文件末尾并發插入。插入完成后,ALTER TABLE把索引加上,記得還有ENGINE=InnoDB,就把MyISAM轉到InnoDB了,這樣的速度遠比直接往InnoDB里插亂序數據來得快。

總結

以上是生活随笔為你收集整理的mysql数据库栏目_MySQL的一些小技巧(持续更新) - mysql数据库栏目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。