当我尝试更改 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
).
我正在尝试向 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
).