【问题标题】:mysql dynamically add unique constraintmysql动态添加唯一约束
【发布时间】:2015-07-14 22:32:30
【问题描述】:

我有一个 MySQL 表,它有五个位置列(洛杉矶、纽约等),其中有一个邻域的列值、一个引用位置的代码(洛杉矶、纽约等)和一个用户 ID .代码和用户 ID 始终存在,并且至少有一个位置列具有值。

理想情况下,我想规范化这张表——但作为一个短期解决方案,我想添加一个约束,上面写着:

“确保用户 ID、代码和位置的唯一组合。”

例如:

row1:用户 ID=1,代码=NY,纽约=布鲁克林,洛杉矶=唐人街
row2:用户 ID=1,代码=NY,纽约=西区,洛杉矶=唐人街

应该允许插入第二行,因为纽约社区不同。

我尝试过常规约束:

ALTER TABLE 位置添加唯一location(user_id, code, new_york);
ALTER TABLE 位置添加唯一location(user_id, code, los_angeles);

但是第二行没有插入,因为上面的第二个约束阻止了它。

没有规范化表,创建此约束的最佳选择是什么?

【问题讨论】:

  • 在 user_id、code 和所有位置列上创建唯一约束不能解决您的问题吗? "ALTER TABLE 位置添加唯一位置(user_id, code, new_york, los_angeles, ...);"
  • @jedrzej.kurylo 应该可以,只要他在“其他”位置列中使用 NULL;如果他使用类似 ''(空字符串)或硬编码字符串常量(如 '[IRRELEVANT]'),这可能是他现在的问题。

标签: mysql


【解决方案1】:

创建一个包含城市的表
id|城市
1|纽约
2|洛杉矶
..|..

并更改表位置,向该表添加外键并设置主键(id、code、city)

id|代码|城市
1 |345 |1 1 |123 |1
..|.. |..

【讨论】:

  • 我不明白这将如何解决唯一约束问题。
猜你喜欢
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2017-01-10
  • 1970-01-01
  • 2021-04-01
  • 2023-01-23
相关资源
最近更新 更多