向 varchar(2000) mysql 表等大数据类型添加外键
P粉378264633
P粉378264633 2023-09-05 17:33:34
[MySQL讨论组]

我有两个表“affiliate_stats”和“transaction”, 'affiliate_stats' 有列 'affiliate_sales' varchar(2000) (子表), 并且“transaction”具有列“_id”varchar(100) 主键(父表)

当我将外键添加到引用“_id”的“affiliate_sales”时 经过 更改表affiliate_stats添加约束fk_affili_sales外键(affiliate_sales)引用事务(_id);

get me this error Specified key was too long; max key length is 3072 经过tes 我知道两列大小应该相等,但就我而言,我需要不同的大小来处理这个问题。 在许多来源中搜索,没有明确的答案,并且没有一个解决方案适合我。

P粉378264633
P粉378264633

全部回复(1)
P粉321676640

将列 affiliate_sales 更改为 VARCHAR(100)

ALTER TABLE `affiliate_stats` 
  MODIFY COLUMN affiliate_tales VARCHAR(100) NOT NULL,
  ADD CONSTRAINT `fk_affili_sales` 
  FOREIGN KEY (affiliate_sales) 
  REFERENCES transaction(`_id`);

如果它是 transaction(_id) 的外键,那么它不需要是 VARCHAR(2000) 因为它永远不能容纳超过 100 的字符串无论如何,字符。

执行此操作之前,请确保该列中当前没有长度超过 100 个字符的字符串。


回复您的评论:

如果您打算在列中存储“数组”(即带有逗号分隔列表的字符串),您应该明白无论如何您都无法在其上创建外键。外键要求列将一个值与transaction表中的一行相关联。如果添加外键约束,则该列中只能存储一个 id。

听起来 affiliate_statstransaction 之间确实存在多对多关系。您需要第三个表来建模多对多关系。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号