標籤:
MySQL 掛起的調試
1. 附加到mysql
[email protected]: gdb -p 1232
1232 是 MySQL 的PID
2. 顯示當前線程
(gdb) info threads
3.顯示所有線程的回溯
(gdb) thread apply all bt
MySQL BINARY
mysql> SELECT * FROM tbl_4;+----+-------+| id | title |+----+-------+| 1 | 11 || 2 | 22 || 3 | 33 || 4 | aa || 5 | bb || 6 | cc || 7 | AA || 8 | BB || 9 | CC |+----+-------+9 rows in set (0.00 sec)mysql> SELECT * FROM tbl_4 WHERE title LIKE \‘a%\‘;+----+-------+| id | title |+----+-------+| 4 | aa || 7 | AA |+----+-------+2 rows in set (0.00 sec)
mysql> SELECT * FROM tbl_4 WHERE BINARY title LIKE \‘a%\‘;+----+-------+| id | title |+----+-------+| 4 | aa |+----+-------+1 row in set (0.00 sec)mysql> SELECT * FROM tbl_4 WHERE BINARY title LIKE \‘A%\‘;+----+-------+| id | title |+----+-------+| 7 | AA |+----+-------+1 row in set (0.00 sec)
GROUP BY WITH ROLLUP
在 GROUP BY 結果的最後一行,列出所有行的總和,如下
mysql> S ELECT COUNT(*), title FROM tbl_4 GROUP BY title WITH ROLLUP;+----------+-------+| COUNT(*) | title |+----------+-------+| 1 | 11 || 1 | 22 || 1 | 33 || 2 | aa || 2 | bb || 2 | cc || 9 | NULL |+----------+-------+7 rows in set (0.00 sec)
ORDER BY IF
排序時將某列中特定值排在最前,例如在如下排序中要把 aa 放在最前面:
mysql> SELECT title FROM tbl_4 ORDER BY IF(title = \‘aa\‘, 0, 1), title;+-------+| title |+-------+| aa || AA || 11 || 22 || 33 || bb || BB || cc || CC |+-------+9 rows in set (0.00 sec)
prompt
有很多 MySQL 資料庫管理,有時會發生自己忘記了在那台伺服器的資料庫上,使用 prompt 來重寫mysql用戶端提示符。
mysql>prompt \\[email protected]\\h(\\d) \\r:\\m:\\s>
- \\u 串連使用者
- \\h 串連主機
- \\d 串連資料庫
- \\r:\\m:\\s: 顯示目前時間
有一一勞永逸的方法,就是在 my.cnf 中直接配置
#不是[mysqld][mysql]prompt=\\\\[email protected]\\\\d \\\\R:\\\\m>
pager
如果 SELECT 出來的結果集超過幾個螢幕,那麼前面的結果無法看到。使用 pager 可以設定調用 os 的 more 或者 less 顯示查詢結果,和在 OS 中使用 more 或者 less 查看大檔案的效果一樣。
mysql> pager morePAGER set to \‘more\‘mysql> \\P morePAGER set to \‘more\‘mysql> pager lessPAGER set to \‘less\‘mysql> \\P lessPAGER set to \‘less\‘mysql> nopagerPAGER set to stdout
DELIMITER
DELIMITER 就是告訴 MySQL 解譯器,命令的結束符是什麼。
預設情況下 MySQL 命令結束是以分號(;),在寫過程或者函數等情況下,這會產生不少問題,因為預存程序中有許多語句,所以每一個都需要一個分號。因此你需要選擇一個不太可能出現在你的語句或程式中的字串作為分隔字元。
[email protected](test) 03:27:17>DELIMITER $
[email protected](test) 03:27:24>SELECT * FROM tbl_4$
+―-+――-+
| id | title |
+―-+――-+
| 1 | 11 |
| 2 | 22 |
| 3 | 33 |
| 4 | aa |
| 5 | bb |
| 6 | cc |
| 7 | AA |
| 8 | BB |
| 9 | CC |
+―-+――-+
9 rows in set (0.00 sec)
LOAD DATA LOCAL INFILE
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \‘file_name.txt\‘
LOAD DATA INFILE and LOAD DATA LOCAL INFILE
在資料庫中,LOAD DATA INFILE 和 LOAD DATA LOCAL INFILE都可以匯入本地的資料,而 MySQL5.0 版本預設支援上述模式
mysql> LOAD DATA INFILE ‘test.sql’ INTO TABLE test;mysql> LOAD DATA LOCAL INFILE ‘test.sql’ INTO TABLE test;
啟動mysql 加參數可限制使用 LOAD DATA LOCAL INFILE
[email protected]:/usr/local/mysql/bin/mysqld_safe --local-infile=0 &
mysql> LOAD DATA INFILE ‘test.sql’ INTO TABLE test;
ERROR 1148 (42000): The used command is not allowed with this MySQL version
而對於對於LOAD DATA INFILE, 可由user的 File_priv 對伺服器主機上的檔案訪問進行控制
MySQL 提示符下運行應用程式
mysql>\\! cd /home
MySQL 應用小筆記