1

我正在errorno:150使用 MySQL。当我尝试创建第三个表时,它显示Can't create table。以下是完整的查询。

CREATE DATABASE `test`;
USE `test`;

-- --------------------------------------------------------

--
-- Table structure for table `product`
--

CREATE TABLE IF NOT EXISTS `product` (
  `product_no.` int(10) NOT NULL AUTO_INCREMENT COMMENT 'This number represent a unique product',
  `name` varchar(50) NOT NULL ,
  `price` decimal(5,2) NOT NULL COMMENT 'Price should have a fomat like 25.90',
  `max_Rating` int(10) NOT NULL COMMENT 'Maximum available rating for each product (n)',
  PRIMARY KEY (`product_no.`)
);

-- --------------------------------------------------------

--
-- Table structure for table `user`
--
CREATE TABLE IF NOT EXISTS `user` (
  `user_id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `password` varchar(20) NOT NULL,
  PRIMARY KEY (`user_id`)
);

-- --------------------------------------------------------

--
-- Table structure for table `rating`
--
CREATE TABLE IF NOT EXISTS `rating` (
  `s.n.` int(10) NOT NULL AUTO_INCREMENT,
  `product_no.` int(10) NOT NULL,
  `user_id` int(10) DEFAULT NULL,
  `given_rating` int(10) DEFAULT NULL,
  PRIMARY KEY (`s.n.`),
  foreign key (`user_id`) references `user(user_id)`,
  foreign key (`product_no.`) references `product(product_no.)`
);

是否发生任何字段不匹配?我现在被困住了。

4

1 回答 1

0

它看起来与您的外键定义中的引用有关。

CREATE TABLE IF NOT EXISTS `rating` (
  `s.n.` int(10) NOT NULL AUTO_INCREMENT,
  `product_no.` int(10) NOT NULL,
  `user_id` int(10) DEFAULT NULL,
  `given_rating` int(10) DEFAULT NULL,
  PRIMARY KEY (`s.n.`),
  /* Remove the backquotes surrounding user(user_id) and product(product_no.) */
  foreign key (`user_id`) references user (user_id),
  /* Inside the parens, `product_no.` should be quoted because of the period */
  foreign key (`product_no.`) references product (`product_no.`)
);

我只想指出,您不会经常遇到以特殊字符命名的表,例如s.nor product_no.。尽管它们在引用时被允许并起作用,但由于它们引入了引用需要,因此使用它们有些不常见。否则就没有必要引用product_no没有..

于 2012-05-16T16:56:16.963 回答