Mysql errors 及 solutions

这篇文章用来整理我在使用 mysql 过程中碰到的 errors 及对应的 solutions。

数据库连接错误
1.
粗粗的红线:PDOException

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 默认是使用 /var/lib/mysql/mysql.sock 启动的。先查看 var/lib 下有没有 mysql 这个目录,没有的话创建一个。查找到 mysql.sock 的所在路径,假设为/path/to/mysql/mysql.sock,在 /var/lib/mysql 创建一个link:

ln -s /var/lib/mysql/mysql.sock /path/to/mysql/mysql.sock

重启一下 mysql,ok!
注:这个 solution 是剽窃别人的,因为当时只记下了具体的解决方法,并没有表明出处,还请原作者见谅,谢谢

创建外键错误
1.

数据表的存储引擎须支持外键关联。mysql 常用的存储引擎为 myisaminnodb,其中 innodb 支持外键关联。

2.

source columnreferenced column 字段类型、长度、属性须一致。例如:tb_users表中有字段 group_id int(6)tb_groups 表主键 group_id mediumint(8) unsigned 建立外键关联时会失败:

Mysql errors 及 solutions_第1张图片

将两个字段的数据类型统一成 int(6) unsigned

Mysql errors 及 solutions_第2张图片
3.

已存在数据的两张表之间建立外键关联需注意:source_column 的所有值必须存在于 referenced_column
中。下面的 sql 语句用于判断是否符合这个条件,如果查询的结果为空,说明符合,否则,不符合。

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 之间就不能建立外键关联。

未完待续......

你可能感兴趣的:(Mysql errors 及 solutions)