【问题标题】:Create table with foreign key constraint failed创建具有外键约束的表失败
【发布时间】:2023-04-09 06:54:01
【问题描述】:

在网站上启动验证系统后,数据库出现错误

MySQL 查询错误:

create table `site_checker_b_forum_file` ( 
ID int(18) not null auto_increment,
FORUM_ID int(18) null REFERENCES B_FORUM(ID),
TOPIC_ID int(20) null,
MESSAGE_ID int(20) null,
FILE_ID int(18) not null REFERENCES B_FILE(ID), 
USER_ID int(18) null, 
TIMESTAMP_X timestamp not null, 
HITS int(18) null, primary key (ID), 
index IX_FORUM_FILE_FILE(FILE_ID), 
index IX_FORUM_FILE_FORUM(FORUM_ID), 
index IX_FORUM_FILE_TOPIC(TOPIC_ID), 
index IX_FORUM_FILE_MESSAGE(MESSAGE_ID) 
)

[[1005] 无法创建表bitrix.site_checker_b_forum_file (errno: 150 "外键约束格式不正确")]

完整的错误代码

LATEST FOREIGN KEY ERROR                                                                                                                                                        
------------------------  
Error in foreign key constraint of table `bitrix`.`site_checker_b_forum_file`:                                                               
Create  table `bitrix`.`site_checker_b_forum_file` with foreign key (FORUM_ID) constraint failed. Referenced table `bitrix`.`B_FORUM` not found in the data dictionary.---------
---    

但我有桌子 B_FORUM B_FORUM table

CREATE TABLE `b_forum` (
  `ID` int(18) NOT NULL AUTO_INCREMENT,
  `FORUM_GROUP_ID` int(11) DEFAULT NULL,
  `NAME` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `DESCRIPTION` text COLLATE utf8_unicode_ci DEFAULT NULL,
  `SORT` int(10) NOT NULL DEFAULT 150,
  `ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_HTML` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `ALLOW_ANCHOR` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_BIU` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_IMG` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_VIDEO` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_LIST` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_QUOTE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_CODE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_FONT` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_SMILES` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_UPLOAD` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `ALLOW_TABLE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `ALLOW_ALIGN` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_UPLOAD_EXT` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ALLOW_MOVE_TOPIC` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `ALLOW_TOPIC_TITLED` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `ALLOW_NL2BR` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `ALLOW_SIGNATURE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `PATH2FORUM_MESSAGE` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ASK_GUEST_EMAIL` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `USE_CAPTCHA` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `INDEXATION` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `DEDUPLICATION` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
  `MODERATION` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `ORDER_BY` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'P',
  `ORDER_DIRECTION` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'DESC',
  `LID` char(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'ru',
  `TOPICS` int(11) NOT NULL DEFAULT 0,
  `POSTS` int(11) NOT NULL DEFAULT 0,
  `LAST_POSTER_ID` int(11) DEFAULT NULL,
  `LAST_POSTER_NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `LAST_POST_DATE` datetime DEFAULT NULL,
  `LAST_MESSAGE_ID` bigint(20) DEFAULT NULL,
  `POSTS_UNAPPROVED` int(11) DEFAULT 0,
  `ABS_LAST_POSTER_ID` int(11) DEFAULT NULL,
  `ABS_LAST_POSTER_NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ABS_LAST_POST_DATE` datetime DEFAULT NULL,
  `ABS_LAST_MESSAGE_ID` bigint(20) DEFAULT NULL,
  `EVENT1` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'forum',
  `EVENT2` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'message',
  `EVENT3` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `HTML` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `XML_ID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`ID`),
  KEY `IX_FORUM_SORT` (`SORT`),
  KEY `IX_FORUM_ACTIVE` (`ACTIVE`),
  KEY `IX_FORUM_GROUP_ID` (`FORUM_GROUP_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `b_file` (
  `ID` int(18) NOT NULL AUTO_INCREMENT,
  `TIMESTAMP_X` timestamp /* mariadb-5.3 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `MODULE_ID` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `HEIGHT` int(18) DEFAULT NULL,
  `WIDTH` int(18) DEFAULT NULL,
  `FILE_SIZE` bigint(20) DEFAULT NULL,
  `CONTENT_TYPE` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'IMAGE',
  `SUBDIR` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `FILE_NAME` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `ORIGINAL_NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `DESCRIPTION` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `HANDLER_ID` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `EXTERNAL_ID` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`ID`),
  KEY `IX_B_FILE_EXTERNAL_ID` (`EXTERNAL_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4951 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

【问题讨论】:

  • 为所有提到的 3 个表提供 DDL(为 B_FORUM 和 B_FILE 添加它们)作为格式化代码。 但我有 B_FORUM 表 - 采用什么方案?
  • @Akina 什么意思提供 DDL?在 InnoDB 中
  • 当有人要求您提供 DDL 时,他希望看到一个表的完整 CREATE TABLE 脚本。您只为一个表提供它,而我们需要在这样的脚本中为任何地方提到的所有表提供它。 PS。为此目的,屏幕截图甚至 DESCRIBE 输出都不安全。聚苯乙烯。还提供精确的 DBserver 版本。
  • 不,我全部尝试,当我使用 SET FOREIGN_KEY_CHECKS=0 并创建表时,站点检查器会删除表:(

标签: mysql database mariadb


【解决方案1】:

如果您的数据库托管在基于 Unix 的系统上,或者如果 lower_case_table_names 设置为 0,则 MariaDB 具有区分大小写的表名,因此您需要使用 b_forumb_file,而不是 @987654328 @ 和 B_FILE。请参阅manual。如果您匹配其他表声明的大小写,则您的 CREATE TABLE 语句在此 demo 中可以正常工作。

【讨论】:

  • 谢谢,这确实是区分大小写的表名,我更改了它并创建了表:) 但是在我运行站点检查器之后 - 它删除给了我同样的错误并删除了表 site_checker_b_forum_file
  • @Karina 我很高兴这有效,但听起来你有一个新问题?如果是这样,请提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2013-03-04
  • 2016-08-17
  • 2011-11-03
  • 1970-01-01
相关资源
最近更新 更多