外键约束使select查询返回0行

sxissh06  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(273)

我得到了这个数据库结构:

DROP TABLE IF EXISTS `account`;
CREATE TABLE IF NOT EXISTS `account` (
  `accountType` varchar(120) NOT NULL,
  PRIMARY KEY (`accountType`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `username`;
CREATE TABLE IF NOT EXISTS `username` (
  `usernameID` int(11) NOT NULL AUTO_INCREMENT,
  `password` varchar(200) NOT NULL,
  `name` varchar(200) NOT NULL,
  `phoneNr` int(15) NOT NULL,
  `email` varchar(120) NOT NULL,
  `accountType` varchar(120) NOT NULL,
  PRIMARY KEY (`usernameID`),
  KEY `accountType` (`accountType`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `username`
  ADD CONSTRAINT `username_ibfk_1` FOREIGN KEY (`accountType`) REFERENCES `account` (`accountType`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;

现在,我想从username表中选择一个用户。在mysql workbench中,我得到了我想要的结果:

SELECT name FROM username;

但是,在php中使用mysqli查询时,我在结果对象中得到num\u rows=>0,如下所示:

(result对象上方的varu dump是我正在发送的查询)
如果我从username表中删除密钥,它就会工作,所以我假设问题就出在这里。我应该如何更改select查询?

hrirmatl

hrirmatl1#

我相信 name 是mysql中的保留字。你可能只需要像这样用倒勾字符转义,

SELECT `name` FROM username;

请参阅关键字和保留字。

cbjzeqam

cbjzeqam2#

出于某种原因,innodb似乎是个问题。当我从username表中删除engine=innodb时,一切都正常了。

相关问题