当我尝试更改 table 以添加外键时收到错误代码 1170

I am gettng the error code 1170 when I try to alter a table to add a foreign key

我正在尝试向 table 添加外键,但收到以下错误消息:错误代码 1170 BLOB/TEXT 列 'member_id' 在没有键的情况下用于键规范长度。

这是我的

ALTER TABLE fact_pharmacy
ADD CONSTRAINT fk_members FOREIGN KEY (member_id)
REFERENCES dim_members(member_id) 
ON DELETE CASCADE
ON UPDATE CASCADE;

dim_member

fact_pharmacy

这里发生的事情是,当您创建外键时,您实际上是在后台创建索引。

MySQL 的设计方式使得构成索引的键必须具有有限的长度(在几百字节的范围内)。 TEXT/BLOB 的列旨在支持非常大的 gigabyte-sized 数据。所以 MySQL 好心地告诉你要下定决心——要么确认你可以只取一小部分 blob 作为索引,要么将其更改为实际适合的东西,比如 VARCHAR。

你当然可以这样做,但我强烈怀疑设计你的表格的人通过为 member_id 选择 TEXT/BLOB 做了糟糕的工作。因此,与其尝试修复此错误,我宁愿修复潜在问题并重新设计架构以使用 member_id.

的短而高效的键

(编辑:更新问题并发布架构后,您可以看到问题 - 将 fact_pharmacy 中的 member_id 更改为与 dim_members 中相同的类型,即是,int).