【问题标题】:MySQL Foreign Key Constraint fails on Linux Server but works on Windows XAMPPMySQL 外键约束在 Linux 服务器上失败,但在 Windows XAMPP 上有效
【发布时间】:2017-01-13 20:27:54
【问题描述】:

我有一个我一生都无法解决的问题。我一直在使用 XAMPP 在 Windows 上的 PHP/MySQL 中创建应用程序,但现在我试图在基于 Linux 的 LAMP 服务器上对其进行测试,但在尝试创建具有外键约束的表时出现以下错误:

“3 - photoProjectItem 表创建:无法添加外键约束”

当我在 Windows 中的 XAMPP 上运行代码时,它运行良好,但在 Linux 中却不行。这些是我正在尝试创建的表:

        CREATE TABLE IF NOT EXISTS generalSecurity(
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            username VARCHAR(100) UNIQUE NOT NULL,
            password VARCHAR(100) NOT NULL,
            firstname VARCHAR(100) NOT NULL,
            secondname VARCHAR(100) NOT NULL,
            accessLevel ENUM('admin', 'contributer', 'subscriber') NOT NULL,
            Email VARCHAR (200) UNIQUE NOT NULL
        ) ENGINE=INNODB;

        CREATE TABLE IF NOT EXISTS generalSiteInfo (
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            siteName VARCHAR(100) NOT NULL,
            siteOwnerID INT(10) UNSIGNED NOT NULL,
            INDEX par_id4(siteOwnerID),
            FOREIGN KEY(siteOwnerID)
                REFERENCES generalSecurity(id)
                ON DELETE CASCADE,
            siteEmail VARCHAR(100) NOT NULL,
            siteAbout VARCHAR(9999) NOT NULL,
            currentTheme VARCHAR(1000) NOT NULL,
            siteCreateDate TIMESTAMP
                DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP
        ) ENGINE=INNODB;

        CREATE TABLE IF NOT EXISTS Project (
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            projectAuthorID INT(10) UNSIGNED NOT NULL,
            INDEX par_id(projectAuthorID),
            FOREIGN KEY(projectAuthorID)
                REFERENCES generalSecurity(id)
                ON DELETE CASCADE,
            projectName VARCHAR(100) NOT NULL,
            projectBlurb VARCHAR(5000) NULL,
            projectTheme VARCHAR(100) NOT NULL,
            projectDate TIMESTAMP
        ) ENGINE=INNODB;

    CREATE TABLE IF NOT EXISTS ProjectItem (
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            authorID INT(10) UNSIGNED NOT NULL,
            INDEX par_id2(authorID),
            FOREIGN KEY(authorID)
                REFERENCES generalSecurity(id)
                ON DELETE CASCADE,
            projectID INT(10) UNSIGNED NOT NULL,
            INDEX par_id3(projectID),
            FOREIGN KEY(projectID)
                REFERENCES project(id)
                ON DELETE CASCADE,
            itemType ENUM('image', 'text') NOT NULL,
            photoFileName VARCHAR(100) NULL,
            itemName VARCHAR(1000) NOT NULL,
            entry VARCHAR(5000) NULL,
            photoMeta VARCHAR(5000) NOT NULL,
            date TIMESTAMP,
            deleted BOOLEAN NOT NULL
        ) ENGINE=INNODB;

尝试创建表“ProjectItem”时失败。你们能看出我遗漏了什么吗?

我非常感谢可以提供的任何帮助

---编辑---

当我删除线条时它会起作用

           INDEX par_id3(projectID),
        FOREIGN KEY(projectID)
            REFERENCES project(id)
            ON DELETE CASCADE,

但我看不出这段关系有任何明显的问题

【问题讨论】:

  • 你确定之前所有的 CREATES 都有效吗
  • ProjectItem 之前的表格?是的,可以看到数据库中的三个表。
  • 我已经弄清楚了,项目表关系的大小写不正确。

标签: php mysql linux windows lamp


【解决方案1】:

问题在于,Linux 中的 MYSQL 显然区分大小写,而在 Windows 中似乎不区分大小写。当它被称为“项目”时,我试图为表“项目”创建关系

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2019-04-03
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多