MySQL 数据库中的外键约束给出错误
Foreign Key Constraints In MySQL DB Gives Error
我正在尝试实施外键约束,但 mysql 一直给我一个错误 有两个 tables "groups" table 和 "members" table.I 在这些 table 之间存在多对多关系,因此使用第三个 table 称为 "members_groups" table 来表示多对多关系。注意:"groups" 和 "members" table 已创建并包含数据,但我现在想添加 "members_groups" table。以下是 sql 代码:
下面是成员table的脚本。
CREATE TABLE IF NOT EXISTS `members` (
`member_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`email` varchar(50) NOT NULL,
`password` char(128) NOT NULL,
`salt` char(128) NOT NULL,
`group_id` bigint(64) unsigned NOT NULL,
`perm_override_add` bigint(64) unsigned NOT NULL,
`perm_override_remove` bigint(64) unsigned NOT NULL,
PRIMARY KEY (`member_id`),
KEY `member_id` (`member_id`)
) ENGINE=InnoDB;
组的脚本 table
CREATE TABLE IF NOT EXISTS `groups` (
`group_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`group_name` varchar(50) NOT NULL,
`permission` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`group_id`)
) ENGINE=InnoDB
脚本 members_groups table
CREATE TABLE members_groups
(
member_id INT(11) NOT NULL ,
group_id INT(10) NOT NULL ,
PRIMARY KEY (member_id, group_id),
FOREIGN KEY (member_id) REFERENCES members(member_id) ON UPDATE CASCADE,
FOREIGN KEY (group_id) REFERENCES groups(group_id) ON UPDATE CASCADE
) ENGINE = InnoDB
这是我从 mysql 管理控制台得到的错误。
谢谢。
您需要在 table 中设置相同的类型。在您的 groups
table 中您定义了
`group_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
而在您的 members_groups
table 中是
group_id INT(10) NOT NULL ,
尝试做出像
这样的改变
CREATE TABLE members_groups
(
member_id INT(11) NOT NULL ,
group_id INT(10) unsigned NOT NULL , --The datatype should be same as group_id in `groups` table
PRIMARY KEY (member_id, group_id),
FOREIGN KEY (member_id) REFERENCES members(member_id) ON UPDATE CASCADE,
FOREIGN KEY (group_id) REFERENCES `groups`(group_id) ON UPDATE CASCADE
) ENGINE = InnoDB;
我正在尝试实施外键约束,但 mysql 一直给我一个错误 有两个 tables "groups" table 和 "members" table.I 在这些 table 之间存在多对多关系,因此使用第三个 table 称为 "members_groups" table 来表示多对多关系。注意:"groups" 和 "members" table 已创建并包含数据,但我现在想添加 "members_groups" table。以下是 sql 代码:
下面是成员table的脚本。
CREATE TABLE IF NOT EXISTS `members` (
`member_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`email` varchar(50) NOT NULL,
`password` char(128) NOT NULL,
`salt` char(128) NOT NULL,
`group_id` bigint(64) unsigned NOT NULL,
`perm_override_add` bigint(64) unsigned NOT NULL,
`perm_override_remove` bigint(64) unsigned NOT NULL,
PRIMARY KEY (`member_id`),
KEY `member_id` (`member_id`)
) ENGINE=InnoDB;
组的脚本 table
CREATE TABLE IF NOT EXISTS `groups` (
`group_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`group_name` varchar(50) NOT NULL,
`permission` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`group_id`)
) ENGINE=InnoDB
脚本 members_groups table
CREATE TABLE members_groups
(
member_id INT(11) NOT NULL ,
group_id INT(10) NOT NULL ,
PRIMARY KEY (member_id, group_id),
FOREIGN KEY (member_id) REFERENCES members(member_id) ON UPDATE CASCADE,
FOREIGN KEY (group_id) REFERENCES groups(group_id) ON UPDATE CASCADE
) ENGINE = InnoDB
这是我从 mysql 管理控制台得到的错误。
谢谢。
您需要在 table 中设置相同的类型。在您的 groups
table 中您定义了
`group_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
而在您的 members_groups
table 中是
group_id INT(10) NOT NULL ,
尝试做出像
这样的改变CREATE TABLE members_groups
(
member_id INT(11) NOT NULL ,
group_id INT(10) unsigned NOT NULL , --The datatype should be same as group_id in `groups` table
PRIMARY KEY (member_id, group_id),
FOREIGN KEY (member_id) REFERENCES members(member_id) ON UPDATE CASCADE,
FOREIGN KEY (group_id) REFERENCES `groups`(group_id) ON UPDATE CASCADE
) ENGINE = InnoDB;