Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL中创建表时出现语法错误_Mysql_Sql_Innodb - Fatal编程技术网

Mysql 在SQL中创建表时出现语法错误

Mysql 在SQL中创建表时出现语法错误,mysql,sql,innodb,Mysql,Sql,Innodb,我正在尝试这个查询,尽管做了几次尝试,但在创建表调用时仍然出现语法错误。其他表创建得很好。。我不明白为什么 学生代码 CREATE TABLE Student ( `student_id` int NOT NULL AUTO_INCREMENT, `phone_number` varchar(50) NOT NULL, `name` varchar(50) NOT NULL, `school` varchar(50) NOT NULL,

我正在尝试这个查询,尽管做了几次尝试,但在创建表调用时仍然出现语法错误。其他表创建得很好。。我不明白为什么

学生代码

  CREATE TABLE Student (
      `student_id` int NOT NULL AUTO_INCREMENT,
      `phone_number` varchar(50) NOT NULL,
      `name` varchar(50) NOT NULL,
      `school` varchar(50) NOT NULL,
      `class` varchar(50) NOT NULL,

      PRIMARY KEY (`student_id`)
    )
餐桌故事

    CREATE TABLE Stories (
      `story_id` int NOT NULL AUTO_INCREMENT,
      `story_name` varchar(50) NOT NULL,
      `number_questions` int NOT NULL,
      `file_name` varchar(100) NOT NULL,

      PRIMARY KEY (`story_id`)
    )
表格问题

    CREATE TABLE Questions (
      `question_id` int NOT NULL,
      `story_id` int NOT NULL,
      `file_name` varchar(100) NOT NULL,
      `concept_tested` varchar(100) NOT NULL,
      `difficuly` varchar(50) NOT NULL,
      `number_options` int NOT NULL,
      `correct_answer` int NOT NULL,
      `call_number` int NOT NULL,

      PRIMARY KEY (`question_id`,`story_id`),

      FOREIGN KEY (`story_id`)
      REFERENCES `Stories`(`story_id`)
      ON DELETE CASCADE
    )
点名

    CREATE TABLE Call (
      `call_id` int NOT NULL AUTO_INCREMENT,
      `student_id` int NOT NULL,
      `story_id` int NOT NULL,
      `question_id` int NOT NULL,
      `call_number` int NOT NULL,
      `total_number` int NOT NULL,

      PRIMARY KEY (`call_id`),

      FOREIGN KEY (`student_id`)
      REFERENCES `Student`(`story_id`)
      ON DELETE CASCADE,

      FOREIGN KEY (`story_id`)
      REFERENCES `Stories`(`student_id`)
      ON DELETE CASCADE,

      FOREIGN KEY (`question_id`)
      REFERENCES `Stories`(`question_id`)
      ON DELETE CASCADE
    )
这是我的错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Call ( `call_id` int NOT NULL AUTO_INCREMENT, `student_id` int NOT NULL, ' at line 1
我已经试着编辑我的代码并检查了好几次,但问题仍然没有解决

我解决了问题

它是:

CREATE TABLE `Call` (
  `call_id` int NOT NULL AUTO_INCREMENT,
  `student_id` int NOT NULL,
  `story_id` int NOT NULL,
  `question_id` int NOT NULL,
  `call_number` int NOT NULL,
  `total_number` int NOT NULL,

  PRIMARY KEY (`call_id`),

  FOREIGN KEY (`student_id`)
  REFERENCES `Student`(`student_id`)
  ON DELETE CASCADE,

  FOREIGN KEY (`story_id`)
  REFERENCES `Stories`(`story_id`)
  ON DELETE CASCADE,

  FOREIGN KEY (`question_id`)
  REFERENCES `Questions`(`question_id`)
  ON DELETE CASCADE
)

我发现必须满足这些条件才能不出现错误150:

  • 这两个表必须是ENGINE=InnoDB。(可以是其他:ENGINE=MyISAM也可以工作)
  • 这两个表必须具有相同的字符集
  • 父表中的PK列和FK列必须是相同的数据类型
  • 父表中的PK列和FK列(如果它们具有定义排序规则类型)必须具有相同的排序规则类型
  • 如果外键表中已有数据,则FK列值必须与父表PK列中的值匹配
  • 并且子表不能是临时表
  • 希望这有帮助

    像这样试试

    CREATE TABLE Questions (
      `call_id` int NOT NULL AUTO_INCREMENT,
      `student_id` int NOT NULL,
      `story_id` int NOT NULL,
      `question_id` int NOT NULL,
      `call_number` int NOT NULL,
      `total_number` int NOT NULL,
    
      PRIMARY KEY (`call_id`),
    
      FOREIGN KEY (`student_id`)
      REFERENCES `Student`(`story_id`)
      ON DELETE CASCADE,
    
      FOREIGN KEY (`story_id`)
      REFERENCES `Stories`(`student_id`)
      ON DELETE CASCADE,
    
      FOREIGN KEY (`question_id`)
      REFERENCES `Stories`(`question_id`)
      ON DELETE CASCADE
    )ENGINE=MYISAM CHARACTER SET UTF8;
    

    看看

    是mysql还是sql server?不能两者同时存在。。。并用你得到的错误更新问题。语法错误并不是您得到的全部信息。是否显示语法错误的错误消息?mysql的那些记号。。不是sql server。我认为op只是有点混乱。@MarcinJuraszek我已经编辑添加了我的错误,你有什么建议吗?@VigneshKumar我正在使用InnoDB