php - 如何调试MySQL错误 "#1064 - You have an error in your SQL syntax"

标签 php mysql mysql-error-1064

我知道这个问题已经被问过多次,但我是一个大初学者,我正在将数据库从 SQL 工作台转移到 phpmyadmin。我不断收到此错误:

SQL 查询:

CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`staff` (
  `StaffID` TEXT(6) NOT NULL,
  `Name` VARCHAR(45) NULL,
  `Email` VARCHAR(254) NULL,
  `Password` VARCHAR(45) NULL,
  PRIMARY KEY (`StaffID`),
  CONSTRAINT `StaffID`
    FOREIGN KEY ()
    REFERENCES `ApplicationSystem`.`UserType` ()
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')
    REFERENCES `ApplicationSystem`.`UserType` ()
    ON DELETE NO ACTION
  ' at line 8

这里是实际的 SQL 代码:

-- MySQL Script generated by MySQL Workbench
-- 04/04/16 23:56:12
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema ApplicationSystem
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema ApplicationSystem
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `ApplicationSystem` DEFAULT CHARACTER SET utf8 ;
USE `ApplicationSystem` ;

-- -----------------------------------------------------
-- Table `ApplicationSystem`.`staff`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`staff` (
  `StaffID` TEXT(6) NOT NULL,
  `Name` VARCHAR(45) NULL,
  `Email` VARCHAR(254) NULL,
  `Password` VARCHAR(45) NULL,
  PRIMARY KEY (`StaffID`),
  CONSTRAINT `StaffID`
    FOREIGN KEY ()
    REFERENCES `ApplicationSystem`.`UserType` ()
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `ApplicationSystem`.`UserType`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`UserType` (
  `Type` ENUM('A', 'HA', 'AT') NULL,
  `ID` TEXT(6) NOT NULL,
  INDEX `ID_idx` (`ID` ASC),
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `ID_UNIQUE` (`ID` ASC),
  CONSTRAINT `ID`
    FOREIGN KEY (`ID`)
    REFERENCES `ApplicationSystem`.`Applicants` (`ApplicantID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `ID`
    FOREIGN KEY (`ID`)
    REFERENCES `ApplicationSystem`.`staff` (`StaffID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `ApplicationSystem`.`Applicants`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`Applicants` (
  `ApplicantID` TEXT(6) NULL,
  `Firstname` VARCHAR(40) NULL,
  `surname` VARCHAR(40) NULL,
  `DOB` DATE NULL,
  `Gender` ENUM('yes', 'no') NULL,
  `Address` VARCHAR(45) NULL,
  `Postcode` VARCHAR(9) NULL,
  `ApplicantMobile` TEXT(11) NULL,
  `ApplicantHome` TEXT(11) NULL,
  `ApplicantEmail` VARCHAR(255) NULL,
  `ParentName` VARCHAR(40) NULL,
  `Relationtoapplicant` VARCHAR(15) NULL,
  `ParentEmail` VARCHAR(255) NULL,
  `ParentAddress` VARCHAR(40) NULL,
  `ParentPostcode` VARCHAR(9) NULL,
  `ParentHome` TEXT(11) NULL,
  `ParentMobile` TEXT(11) NULL,
  `Currentschool` VARCHAR(40) NULL,
  `ApplicantInYr11` ENUM('yes', 'no') NULL,
  `Sibbling` ENUM('yes', 'no') NULL,
  `SibblingName` VARCHAR(40) NULL,
  `SibblingYear` TEXT(2) NULL,
  `MedicalConditions` VARCHAR(30) NULL,
  `AccessArrangementsAvailable` ENUM('yes', 'no') NULL,
  `AccessArrangments` VARCHAR(20) NULL,
  `Ethnic` VARCHAR(40) NULL,
  `FirstLanguage` VARCHAR(15) NULL,
  `HomeLanguage` VARCHAR(15) NULL,
  `Religion` VARCHAR(15) NULL,
  `Nationality` VARCHAR(20) NULL,
  `ArmedForces` ENUM('yes', 'no') NULL,
  `PreviouslyLookedAfter` ENUM('yes', 'no') NULL,
  `EUResident` ENUM('yes', 'no') NULL,
  `RestrictionResidence` ENUM('yes', 'no') NULL,
  `school1` VARCHAR(45) NULL,
  `school2` VARCHAR(45) NULL,
  `school3` VARCHAR(45) NULL,
  `school4` VARCHAR(45) NULL,
  `UPN` TEXT(13) NULL,
  `UCL` TEXT(13) NULL,
  `ULN` TEXT(10) NULL,
  `Password` VARCHAR(40) NULL,
  `Course1` VARCHAR(30) NULL,
  `Course2` VARCHAR(30) NULL,
  `Course3` VARCHAR(30) NULL,
  `Course4` VARCHAR(30) NULL,
  `Course5` VARCHAR(30) NULL,
  `Complete` TINYINT(1) NULL,
  `Outcome` ENUM('R', 'A') NULL,
  PRIMARY KEY (`ApplicantID`),
  UNIQUE INDEX `idtable1_UNIQUE` (`ApplicantID` ASC),
  UNIQUE INDEX `ApplicantEmail_UNIQUE` (`ApplicantEmail` ASC),
  CONSTRAINT `ApplicantID`
    FOREIGN KEY ()
    REFERENCES `ApplicationSystem`.`UserType` ()
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `ApplicationSystem`.`table1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`table1` (
  `ID` TEXT(6) NOT NULL,
  `outcome` TEXT(6) NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `ApplicationSystem`.`outcome`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`outcome` (
  `ID` TEXT(6) NOT NULL,
  `Outcome` ENUM('R', 'A') NULL,
  PRIMARY KEY (`ID`),
  CONSTRAINT `ID`
    FOREIGN KEY (`ID`)
    REFERENCES `ApplicationSystem`.`Applicants` (`ApplicantID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE `ApplicationSystem` ;

-- -----------------------------------------------------
-- Placeholder table for view `ApplicationSystem`.`view1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `ApplicationSystem`.`view1` (`id` INT);

-- -----------------------------------------------------
-- View `ApplicationSystem`.`view1`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `ApplicationSystem`.`view1`;
USE `ApplicationSystem`;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS

最佳答案

  CONSTRAINT `StaffID`
    FOREIGN KEY ()
    REFERENCES `ApplicationSystem`.`UserType` ()

要声明外键约束,您必须指示参与约束的特定列。你还没有在这里这样做。正确的语法是

  CONSTRAINT `StaffID`
    FOREIGN KEY (<name of a column in this table>)
    REFERENCES `ApplicationSystem`.`UserType` (<name of the matching column in the referenced table>)

填写<placeholders>使用正确的实际列名称。

不过,塞巴斯有一个很好的观点;数据不在 Workbench 或 phpMyAdmin“中”;这些只是连接到数据库进程的管理客户端,因此您应该能够建立到现有数据库的新连接。

关于php - 如何调试MySQL错误 "#1064 - You have an error in your SQL syntax",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414472/

相关文章:

php - 在 flv 播放器中创建播放列表?

php - 是否有用于 PHP 对象的 XML 解码器?

mysql - 这个mysql创建表查询有什么问题?

mysql - 如何找到出生日期在 1980 年到 1996 年之间的用户的百分比。

php - 在不使用表单的情况下单击链接时发送 POST 数据?

php - 如何在mysql中的关系数据中的每个父记录上选择n个记录子记录

PHP 和问题

php - 特定时间内 mysql 记录的平均值

php - 如何使用 PHP 读取动态生成的 HTML 单选按钮值并将其插入数据库?

php - MySQL/MariaDB 事务访问冲突 1064