發表文章

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

XAMPP 開機自動啟動

圖片
這是把 server 換成 XAMPP 遇到的第二個問題,開機時不會自動啟動 Apache 和 MySQL,每次都要手動開啟。

XAMPP 資料庫改成需要密碼登入

圖片
最進把電腦裡的 AppServ 換成 XAMPP,發現開啟 phpMyAdmin 可以直接登入看到資料庫,所以想把它改成需要密碼才能登入。

Laravel [8.x] 不啟用外鍵檢查

圖片
資料表有設定關聯時,如果要刪除或清空資料表時會出現 Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint 錯誤,即使關聯是設定 cascade,還是會觸發。

MySQL 欄位編碼選擇

欄位編碼的問題我找到一篇 文章 寫得還不錯,我決定參考他的結論寫一下自己的筆記。

[phpMyAdmin] #1193 - Unknown system variable 'lc_messages'

圖片
身為一個沒有 UI 就很難活下去的工程師,在忍了一年後決定裝個 phpMyAdmin。不過目前用的 MySQL 版本略舊,最新的 phpMyAdmin 裝下去之後發生以下問題,而沒辦法正常使用。解決方式也很簡單,就是找到噴錯的程式把他註解或刪除。

MySQL 全文檢索

MySQL 從 5.7.6 版開始有內建 ngram,可以支援中文檢索。 一、事前準備 1. 調整儲存引擎 要使用全文檢索的 table 必須是 InnoDB 或 MyISAM。 2. 設定分詞詞語長度 ngram 能對字串進行分詞,每個詞連續 N 個字,N 為 1~10 的數字 (預設為 2),可以在 MySQL 設定檔中進行設定調整。 ngram_token_size=2 ngram 範例 (全文檢索): N = 1:全,文,檢,索 N = 2:全文,文檢,檢索 N = 3:全文檢,文檢索 N = 4:全文檢索 二、建立 FULLTEXT 索引 像一般加 index 的方式一樣,建立 FULLTEXT 類型的索引,要注意的是只能在 CHAR、VARCHAR 或 TEXT 的欄位上建立。 ALTER TABLE `news` ADD FULLTEXT INDEX ft_index (`title`) WITH PARSER ngram; WITH PARSER ngram 是重點,一定要有。 三、SQL 全文檢索有三種類型,分別是 Natural Language、Boolean、Query Expansion,MySQL 預設是 Natural Language 也就是我這次用的,以後如果有機會用到其他的再補上來。 1. Natural Language 修飾符是 IN NATURAL LANGUAGE MODE ,不能使用運算符,由於他是預設類型,所以修飾符寫不寫都沒差。 SQL 在滿足以下條件時,回傳結果會自動以相關性由高至低排序 沒有明確的 ORDER BY 如果 join 其他 table,全文檢索必須是最左邊的 table 範例: SELECT *, MATCH (`title`) AGAINST ('關鍵字' IN NATURAL LANGUAGE MODE) AS score FROM `news` WHERE MATCH (`title`) AGAINST ('關鍵字' IN NATURAL LANGUAGE MODE); 範例中,score 是相關性的評分,搜尋結果就是依據這個評分做排序。 2. Boolean 修飾符是 IN BOOLEAN MODE ,可以使用運...

MySQL Trigger

圖片
最近把資料儲存引擎從 MyISAM 改成 InnoDB,會遇到複合鍵 AUTO_INCREMENT 而無法轉換的問題。

顯示資料表索引

SQL 如下: SHOW KEYS FROM <table> 如果要特別顯示某種索引,可帶入其他條件,例如想知道主鍵是什麼的話可以: SHOW KEYS FROM <table> WHERE Key_name = 'PRIMARY';

顯示資料表有哪些外來鍵

圖片
第一個方式是使用 phpMyAdmin,在結構的地方選擇「關聯檢視」,就可以看出目前設定的關聯及對應的處理。 第二種是用 SQL 撈取 schema 資料。 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

外來鍵的簡單使用

圖片
MySQL InnoDB 可以設定資料表之間的關聯,這樣一來父表異動時,子表可有相應的處理。

mysqlnd cannot connect to MySQL 4.1+

修改 AppServ/MySQL/my.ini 將 old_passwords=1 註解 使用系統 command 登入 mysql,mysql.exe 放在 MySQL\bin 裡面,指令: mysql -u root -p 登入後修改密碼 (帳號密碼請自行變更) mysql> SET old_passwords=FALSE; mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('88888888'); mysql> flush privileges; 重新啟動 mysql