發表文章

目前顯示的是有「MySQL」標籤的文章

[MYSQL] RAND()

RAND() 亂數 RAND() RAND(N) N傳入的數值 回傳一個隨機浮點數v,範圍在 0 到1 之間 ( 0 ≤ v ≤ 1.0)。若已指定一個整數參數 N ,則它被用作種子值,用來產生相同的亂數。 mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 mysql> SELECT RAND(); -> 0.70100469486881 mysql> SELECT RAND(20); -> 0.15888261251047 若要在i ≤ R ≤ j 這個範圍得到一個隨機整數 R,需要用到運算式 FLOOR(i + RAND() * (j – i + 1))。例如,若要在7 到 12 的範圍(包括7和12)內得到一個隨機整數, 可使用以下語句: SELECT FLOOR(7 + (RAND() * 6)); 在ORDER BY語句中,不能使用一個帶有RAND()值的列,原因是 ORDER BY 會計算列的多重時間。然而,可按照如下方式取得檢索結果的隨機順序: SELECT * FROM tbl_name ORDER BY RAND(); 可以使用ORDER BY RAND()結合 LIMIT 達到從資料行中隨機取樣: SELECT * FROM table1, table2 WHERE a=b AND c 注意,在WHERE語句中,WHERE每執行一次,RAND()就會被再計算一次。 RAND()不能當作一個完美的亂數產生器(永遠不會重覆),而是在不同MySQL版本平台之間可相容,可以快速產生ad hoc亂數的產生器。

[mysql] FIND_IN_SET

SQL 我們如果要查找某個欄位是否為某個值的時候,會用 WHERE 去下條件,例如: SELECT * FROM `table` WHERE `ID`=2 當我們同時要找 `ID`=2, 5, 6, 7, ... 都可以的情況,用 WHERE 來寫就太醜了: SELECT * FROM `table` WHERE `ID`=2 OR `ID`=5 OR `ID`=6 OR `ID`=7 OR ... 這時也許 ID 的值可以用 IN 取出,就是所謂的 SUBSELECT,也許能解決大部分的問題: SELECT * FROM `table` WHERE `ID` IN (SELECT `ID` FROM `table2` WHERE ...) 可是總是有情況不美好的時候,也就是無法用 IN 取出我要的 ID,這時如果我們已經能事先知道要查詢哪些 ID,把他用 ',' 組成一個字串,再用  FIND_IN_SET()就能解決這個問題: SELECT * FROM `table` WHERE  FIND_IN_SET(`ID`, '2,5,6,7,8,9,11,21,33,45')

MySQL如何设置Auto_increment字段初始值

alter table table_name AUTO_INCREMENT = n

MYSQL 判斷 TABLE 是否存在

1. show tables like 'table_name'; 2. select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='db_name' and TABLE_NAME='table_name';

MySQL中使用IF的例子

SELECT IF(A>B,A,B);

用phpMyAdmin連接數據庫時出現的錯誤#2002

#2002 - 服務器沒有響應 (or the local MySQL server's socket is not correctly configured) 原因: 這個問題一般是由於不能通過mysql.sock來連接數據庫。 一般php.ini不需要修改的,但有些未知的原因需要指定mysql.default_socket的值, mysql.sock的路徑根據你的mysql的安裝會有所不同。 解決方法: 1、確定MYSQL服務器的mysql.sock的路徑 可以用命令netstat -nap |grep mysql去查看。 我的服務器是/tmp/mysql.sock。 2、編輯php.ini mysql.default_socket = /tmp/mysql.sock 3、重新啟動apache服務器即可。