gpt4 book ai didi

mysql - #1005 - 无法创建表 errno : 150

转载 作者:可可西里 更新时间:2023-11-01 08:16:37 25 4
gpt4 key购买 nike

在问这个问题之前在Stackoerflow看到了很多问题

当我执行下面的 mlm_commission 创建表查询时,

我收到以下错误。

1005 - Can't create table 'mlm_new.mlm_commission' (errno: 150) (Details…)

此外,当我单击“详细信息”时,我得到了以下文本

Supports transactions, row-level locking, and foreign keys

创建佣金表

CREATE TABLE IF NOT EXISTS mlm_commission
(`weekno` int(11) NOT NULL,
`level` int(11) NOT NULL,
`username` varchar(500) NOT NULL,
`PositionA` int(11) NOT NULL,
`CFPositionA` int(11) NOT NULL,
`PositionB` int(11) NOT NULL,
`CFPositionB` int(11) NOT NULL,
`PositionC` int(11) NOT NULL,
`CFPositionC` int(11) NOT NULL,
`ABLeft` int(11) NOT NULL,
`CFABLeft` int(11) NOT NULL,
`ABRight` int(11) NOT NULL,
`CFABRight` int(11) NOT NULL,
`CLeft` int(11) NOT NULL,
`CFCLeft` int(11) NOT NULL,
`CRight` int(11) NOT NULL,
`CFCRight` int(11) NOT NULL,
`ABMatchingPair` int(11) NOT NULL,
`CMatchingPair` int(11) NOT NULL,
`IsIncludedToParent` enum('Y','N'),
`side` enum('L','R') NOT NULL,
`leg` enum('0','1','2') NOT NULL,
`parent_key` varchar(15) NOT NULL,
`commission` int(11) NOT NULL,
FOREIGN KEY(`username`) REFERENCES mlm_rtmfx_users(`username`),
FOREIGN KEY(`side`) REFERENCES mlm_rtmfx_users(`side`),
FOREIGN KEY(`leg`) REFERENCES mlm_rtmfx_users(`leg`),
FOREIGN KEY(`parent_key`) REFERENCES mlm_rtmfx_users(`parent_key`),
PRIMARY KEY(`username`,`weekno`,`level`));

我在下表的 mlm_rtmfx_commission 表中引用了 4 个外键值。

CREATE TABLE `mlm_rtmfx_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(1023) NOT NULL,
`username` varchar(500) NOT NULL,
`user_key` varchar(15) NOT NULL,
`parent_key` varchar(15) NOT NULL,
`sponsor_key` varchar(15) NOT NULL,
`leg` enum('0','1','2') NOT NULL,
`payment_status` enum('0','1') NOT NULL,
`pinno` int(11) NOT NULL,
`user_password` varchar(8) NOT NULL,
`side` enum('L','R') NOT NULL,
`iseligible` enum('Y','N') NOT NULL,
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)

您可以检查每个外键引用是否具有相同的名称和类型。

我看过这个Error No:150我对索引感到困惑。

我在 mlm_rtmfx_users 表中也有索引列表。请检查以下内容。

mlm_rtmfx_users index

我从下面的查询中得到了索引表。

SHOW INDEX FROM mlm_rtmfx_users

请澄清我哪里出错了?如果我的问题不清楚,请告诉我。

最佳答案

FOREIGN KEY 创建有两个要求。首先,引用列必须与被引用列具有完全相同的数据类型。其次,被引用列的索引必须与引用列完全一样。也就是说,如果您有 3 个单个 FOREIGN KEY,则需要在引用表上有 3 个相应的索引。如果您有一个包含 3 列的复合 FOREIGN KEY,则您需要在引用表中的相同 3 列上有一个相应的复合索引。

您在mlm_rtmfx_users 中引用了一些 列索引,但每个 引用列的索引必须与FOREIGN KEY 引用表中的列。因此,您需要在 side,leg,parent_key,user 上添加索引。

如果减少 username 的长度,您将不会超过每个索引 767 字节的 InnoDB 限制。

CREATE TABLE `mlm_rtmfx_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(1023) NOT NULL,
`username` varchar(50) NOT NULL,
`user_key` varchar(15) NOT NULL,
`parent_key` varchar(15) NOT NULL,
`sponsor_key` varchar(15) NOT NULL,
`leg` enum('0','1','2') NOT NULL,
`payment_status` enum('0','1') NOT NULL,
`pinno` int(11) NOT NULL,
`user_password` varchar(8) NOT NULL,
`side` enum('L','R') NOT NULL,
`iseligible` enum('Y','N') NOT NULL,
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
-- More indices are needed in the parent table:
INDEX (`username`),
INDEX (`side`),
INDEX (`leg`),
INDEX (`parent_key`)
)

如果你必须保持用户名的长度为500,你将需要enable innodb_long_prefix增加索引的允许字节长度。

将额外的索引添加到父表(并且 username 长度减少到 InnoDB 的索引限制),可以成功创建表。 Here it is in action

关于mysql - #1005 - 无法创建表 errno : 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com