【问题标题】:errno: 150 "Foreign key constraint is incorrectly formed"errno: 150 "外键约束格式不正确"
【发布时间】:2015-06-27 17:46:29
【问题描述】:

我在尝试运行以下安装脚本时收到 150 错误。 怎么了?

serverPermissions 似乎触发了错误,但我不确定为什么。 据我所知,我认为外键约束都已正确映射。我可能遗漏了一些明显的东西。

-- Setup my members database
DROP DATABASE IF EXISTS mymembers;
CREATE DATABASE IF NOT EXISTS mymembers;

/*
* The list of all members in the community
*/
DROP TABLE IF EXISTS members;
CREATE TABLE members
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
steamID3 INT NOT NULL UNIQUE,
PRIMARY KEY (id)
);

/*
* Lists all servers in operation
*/
DROP TABLE IF EXISTS servers;
CREATE TABLE servers
(
sid INT NOT NULL AUTO_INCREMENT,
sname VARCHAR(30), -- name of server (short name)
PRIMARY KEY(sid)
);

/*
* Maps a member and a server together along with a flag. 
* Record (0, 12, 1, 0) indicates member 12 has flag 0 on server 1.
*/
DROP TABLE IF EXISTS serverPermissions;
CREATE TABLE serverPermissions
(
mid INT,
sid INT,
flagid INT,
PRIMARY KEY(mid, sid, flagid),
FOREIGN KEY (mid) REFERENCES members(id),
FOREIGN KEY (sid) REFERENCES servers(sid),
FOREIGN KEY (flagid) REFERENCES flags(id)
);

/*
* flags are used to give custom permissions to players.
* For example a record may be: (0, "VIP", "This play is very important")
*/
DROP TABLE IF EXISTS flags;
CREATE TABLE flags
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(10),
description VARCHAR(100),
PRIMARY KEY(id)
);

【问题讨论】:

    标签: mysql sql mariadb


    【解决方案1】:

    更改表的创建顺序。您应该在创建serverPermissions 之前创建flags 表。见Demo Here

    【讨论】:

    • 哦,我真尴尬。我在凌晨 3 点制作数据库,所以这就是我的借口。谢谢!
    【解决方案2】:

    在添加外键约束时,两个表的存储类型都应为 InnoDb。将两个表的类型从 MyISAM 更改为 InnoDB

    【讨论】:

      【解决方案3】:

      此链接 (https://mariadb.org/mariadb-innodb-foreign-key-constraint-errors/) 提供了支持外键的引擎类型的快速快照。

      据我所知,以下 MariaDB 和/或 MySQL 存储引擎支持外键:

      InnoDB (both innodb_plugin and XtraDB)
      PBXT (https://mariadb.com/kb/en/mariadb/about-pbxt/)
      SolidDB for MySQL (http://sourceforge.net/projects/soliddb/)
      ScaleDB (https://mariadb.com/kb/en/mariadb/scaledb/ and http://scaledb.com/pdfs/TechnicalOverview.pdf)
      MySQL Cluster NDB 7.3 or later (https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-ndb-innodb-engines.html)
      

      【讨论】:

        猜你喜欢
        • 2018-06-19
        • 2018-03-02
        • 2020-07-07
        • 2017-04-13
        • 2018-09-04
        • 2019-09-17
        • 2020-12-16
        • 2019-09-15
        相关资源
        最近更新 更多