MySQL-不可能在MySQL 5.7上使用引用(但正在使用5.0)

MySQL-不可能在MySQL 5.7上使用引用(但正在使用5.0),mysql,sql,Mysql,Sql,我正在尝试向数据库中的表添加外键。让我们考虑下面的最小例子: CREATE DATABASE db_foo; USE db_foo; CREATE TABLE a(b VARCHAR(3) PRIMARY KEY); CREATE TABLE c(d VARCHAR(3), KEY c_ix (d)); ALTER TABLE c ADD CONSTRAINT fk_c_a FOREIGN KEY (d) REFERENCES a(b); 上面给出的代码在版本为5.0.95的MySQL服务器上

我正在尝试向数据库中的表添加外键。让我们考虑下面的最小例子:

CREATE DATABASE db_foo;
USE db_foo;
CREATE TABLE a(b VARCHAR(3) PRIMARY KEY);
CREATE TABLE c(d VARCHAR(3), KEY c_ix (d));
ALTER TABLE c ADD CONSTRAINT fk_c_a FOREIGN KEY (d) REFERENCES a(b);
上面给出的代码在版本为5.0.95的MySQL服务器上运行得非常好,但当我在另一台运行MySQL版本5.7.12的服务器上运行它时,会出现以下错误:

ERROR 1142 (42000): REFERENCES command denied to user 'toto'@'xxx.xxx.xx.xx' for table 'a'
所以我的第一个猜测是检查我在两台服务器上是否拥有相同的权限。这是
SHOW GRANTS的输出

在使用MySQL 5.0.95的服务器上:

+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for toto@%                                                                                                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'toto'@'%' IDENTIFIED BY PASSWORD '*********'                                                                                          |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `db\_%`.* TO 'toto'@'%'  |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for toto@%                                                                                                                                                                                            |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'toto'@'%'                                                                                                                                                                             |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `db\_%`.* TO 'toto'@'%' |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
在使用MySQL 5.7.12的服务器上:

+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for toto@%                                                                                                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'toto'@'%' IDENTIFIED BY PASSWORD '*********'                                                                                          |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `db\_%`.* TO 'toto'@'%'  |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for toto@%                                                                                                                                                                                            |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'toto'@'%'                                                                                                                                                                             |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `db\_%`.* TO 'toto'@'%' |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

我不知道为什么它在一个案例中有效,而在另一个案例中无效,因为我似乎在这两个案例中拥有相同的特权。有什么建议吗

在MySQL 5.0/5.1/5.4中,
REFERENCES
grant尚未实现

我第一次看到它是在MySQL 5.5中,但它仍然不能正常工作。但是,它现在工作正常,从那一刻起,您需要向您的用户帐户授予
引用
权限

请参阅MySQL 5.5文档:

引用可以创建外键。级别:全局、数据库、, 表,列


在第二种情况下,您没有密码,请尝试添加密码,然后回复我..您好,在这两种情况下,我使用相同的登录过程,密码:
mysql-h-u'toto'-p
。不知道为什么它没有出现在
show grants中输出。如果您缺少引用权限,为什么不授予它呢?错误消息清楚地说明了此处的错误。在5.0中不需要它的原因是MySQL 5.7.6中引入了此特权。5.7中有5027373个与5.0中不同的其他细节。只需等待,直到您使用第一个旧的
group by
-语句。因此,只需倾听错误消息并相应地调整数据库。如果不进行更改,您将无法完全更新11年前的数据库。事实上,MySQL 5.7比5.0更详细。。。我没有在工作中欺骗DB管理员,只是添加了
引用
权限就解决了问题。如果有人想回答问题,我可以接受并关闭问题。