【发布时间】: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 并创建表时,站点检查器会删除表:(