无法创建表mysql(mariadb)。表已损坏
不知怎么回事,我的数据库已经进入了一个糟糕的状态。我以前有一个名为live_stream的表。当我试图删除外键约束时,我遇到了一个错误,mariadb无法将无法创建表mysql(mariadb)。表已损坏,mysql,mariadb,Mysql,Mariadb,不知怎么回事,我的数据库已经进入了一个糟糕的状态。我以前有一个名为live_stream的表。当我试图删除外键约束时,我遇到了一个错误,mariadb无法将\sql-26_e7a重命名为live_stream。现在,当我尝试运行下面的语句时,我得到了这个错误 无法创建表live\u stream(错误号:150“外键约束格式不正确”) CREATE TABLE live\u流 (idbigint(20)非空主键) 如您所见,我在定义中没有任何外键约束。如果我尝试使用不同的表名使用完全相同的定义,
\sql-26_e7a
重命名为live_stream
。现在,当我尝试运行下面的语句时,我得到了这个错误
无法创建表live\u stream
(错误号:150“外键约束格式不正确”)
CREATE TABLE live\u流
(
idbigint(20)非空主键)代码>
如您所见,我在定义中没有任何外键约束。如果我尝试使用不同的表名使用完全相同的定义,它会起作用。如果我试图放下桌子,mariadb会抱怨live_stream不存在。它就像表或外键被卡在事务或类似的东西中一样
我正在使用galara和maria db 10.3
更新
我相信当外键和唯一索引被赋予相同的名称时,问题就出现了。我重新创建了这个场景,当我试图删除索引时,mariadb阻止了它
*更新2*
这是显示引擎INNODB状态的输出;
*更新3*
以下是复制的步骤
创建表tb1
(
id bigint null,
约束tb1_pk
主键(id)
);
创建表tb2
(
id bigint null,
tb1_id bigint null,
约束tb2_pk
主键(id),
约束tb2\U tb1\U id\U fk
外键(tb1_id)引用tb1(id)
);
更改表tb2
添加约束tb2\u tb1\u id\u fk
唯一(tb1\u id
,tb1\u id
)
将索引tb2_tb1_id_fk放到tb2上
问题是,唯一约束与外键同名,并且引用同一列两次。您是否可以尝试创建或替换,而不是仅创建一个。您可以给我一个示例吗@SatyaCREATE或REPLACE TABLE live_stream(id BIGINT NOT NULL主键)@Satya same error::您可以在命令提示符下尝试此命令以查看错误:mysqlcheck-uroot-p