【问题标题】:MYSQL Creating tables with foreign keys producing errorsMYSQL 创建带有外键的表会产生错误
【发布时间】:2012-03-20 10:36:31
【问题描述】:

尝试使用外键创建一些新表,但我遇到了问题,这是我收到的代码和错误,我认为它有一些问题 用我的外键做什么?

#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 '(`CustomerID`),
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1' at line 10



DROP TABLE IF EXISTS `Customer`;
CREATE TABLE `Customer` (

    `CustomerID`            INT UNSIGNED AUTO_INCREMENT, 
    `Customer_Number`       VARCHAR(100), 
    `Customer_Name`         VARCHAR(100), 
    `Website`               VARCHAR(255), 
    `Logo`                  VARCHAR(100),

    PRIMARY KEY(`CustomerID`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;


    DROP TABLE IF EXISTS `Reports`;
    CREATE TABLE `Reports` (

        `ReportsID`             INT UNSIGNED AUTO_INCREMENT, 
        `Role`                  VARCHAR(70), 
        `Region`                VARCHAR(70), 
        `Inpection_Type`        VARCHAR(70), 
        `CustomerID`            INT UNSIGNED,
        `Report_Date`           DATE NOT NULL DEFAULT '0000-00-00',
        `Order_Date`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `Customer_Name`         VARCHAR(100),
        `Customer_Division`     VARCHAR(70),
        `Memo`                  VARCHAR(255),
        `Billing_Key`           VARCHAR(70),

        PRIMARY KEY(`ReportsID`),
        FOREIGN KEY (`CustomerID`) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;

    DROP TABLE IF EXISTS `CustomerContact`;
    CREATE TABLE `CustomerContact` (

        `ContactID`             INT UNSIGNED AUTO_INCREMENT,
        `CustomerID`            INT UNSIGNED,
        `Division`              VARCHAR(100), 
        `Contact`               VARCHAR(100), 
        `Address`               VARCHAR(255),
        `Phone`                 VARCHAR(100),
        `Fax`                   VARCHAR(100),
        `Email`                 VARCHAR(100),
        `Mobile`                VARCHAR(100),

        PRIMARY KEY(`ContactID`),
        FOREIGN KEY (`CustomerID) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;

【问题讨论】:

  • Logo varchar()primary key 之间缺少逗号?
  • @biziclop 修复后效果一样

标签: mysql datatable foreign-keys foreign-key-relationship


【解决方案1】:

你少了一个逗号:

    `Logo`                    VARCHAR(100),
    PRIMARY KEY(`CustomerID`)

等等

最后也是一个反勾:

    CONSTRAINT FOREIGN KEY (`CustomerID`) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE

【讨论】:

  • 我用一些缺少的逗号更新了我的代码,但结果相同
  • 最后一行,你错过了一个反引号(见更新的回复)
【解决方案2】:

Logo 列后缺少逗号,外键定义中 CustomerID 列名称末尾缺少反引号。

修复这些问题并重新运行 DDL 后,您会发现 CustomerContact 表没有名为 CustomerID 的列,因此您也应该添加它。

  DROP TABLE IF EXISTS `Customer`;
    CREATE TABLE `Customer` ( 
        `CustomerID`            INT UNSIGNED AUTO_INCREMENT,
        `Customer_Number`        VARCHAR(100),
        `Customer_Name`            VARCHAR(100),
        `Website`                VARCHAR(255),
        `Logo`                    VARCHAR(100),
        PRIMARY KEY(`CustomerID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;


    DROP TABLE IF EXISTS `CustomerContact`;
    CREATE TABLE `CustomerContact` (

        `ContactID`                INT UNSIGNED AUTO_INCREMENT,
        `Division`                VARCHAR(100),
        `Contact`                VARCHAR(100),
        `Address`                VARCHAR(255),
        `Phone`                    VARCHAR(100),
        `Fax`                    VARCHAR(100),
        `Email`                    VARCHAR(100),
        `Mobile`                VARCHAR(100),
        PRIMARY KEY(`ContactID`),
        CONSTRAINT FOREIGN KEY (`CustomerID`) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 2016-08-18
    • 1970-01-01
    • 2019-04-28
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2013-01-29
    相关资源
    最近更新 更多