這篇文章用來整理我在使用 mysql 過程中碰到的 errors 及對應(yīng)的 solutions。
數(shù)據(jù)庫連接錯誤
1.

solution:
修改 mysql 配置文件 my.cnf
#bind-address=127.0.0.1
restart mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
mysql 啟動失敗
1.
error message:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
solution:
mysql 默認(rèn)是使用 /var/lib/mysql/mysql.sock 啟動的。先查看 var/lib 下有沒有 mysql 這個目錄,沒有的話創(chuàng)建一個。查找到 mysql.sock 的所在路徑,假設(shè)為/path/to/mysql/mysql.sock,在 /var/lib/mysql 創(chuàng)建一個link:
ln -s /var/lib/mysql/mysql.sock /path/to/mysql/mysql.sock
重啟一下 mysql,ok!
注:這個 solution 是剽竊別人的,因為當(dāng)時只記下了具體的解決方法,并沒有表明出處,還請原作者見諒,謝謝
創(chuàng)建外鍵錯誤
1.
數(shù)據(jù)表的存儲引擎須支持外鍵關(guān)聯(lián)。mysql 常用的存儲引擎為 myisam,innodb,其中 innodb 支持外鍵關(guān)聯(lián)。
2.
source column 和 referenced column 字段類型、長度、屬性須一致。例如:tb_users表中有字段 group_id int(6) 與 tb_groups 表主鍵 group_id mediumint(8) unsigned 建立外鍵關(guān)聯(lián)時會失?。?/p>

將兩個字段的數(shù)據(jù)類型統(tǒng)一成 int(6) unsigned:

3.
已存在數(shù)據(jù)的兩張表之間建立外鍵關(guān)聯(lián)需注意:source_column 的所有值必須存在于 referenced_column
中。下面的 sql 語句用于判斷是否符合這個條件,如果查詢的結(jié)果為空,說明符合,否則,不符合。
mysql> SELECT DISTINCT source_column FROM source_table WHERE source_column NOT IN (SELECT referenced_column FROM referenced_table);
例如:
mysql> select * from tb_users;
+-----------------------+
| id | group_id |
+-----------------------+
| 1 | 1 |
| 2 | 3 |
+-----------------------+
mysql> select * from tb_gruops;
+---------------------------+
| group_id | group_name |
+---------------------------+
| 1 | superadmin |
| 2 | postadmin |
+---------------------------+
mysql> SELECT DISTINCT group_id FROM tb_users WHERE group_id NOT IN (SELECT group_id FROM tb_groups);
+------------+
| group_id |
+------------+
| 3 |
+------------+
# 這種情況下 tb_users 的 group_id 與 tb_groups 的 group_id 之間就不能建立外鍵關(guān)聯(lián)。
未完待續(xù)......