mysql - 复合主键的重复值
问题描述
当我想插入两条新记录时,例如 (1,2, true), (1,2, false) 我得到了重复的 du champ '1-2' 它的逻辑,因为当我插入另外两条记录 (1,2, true ) (2,1, false) 一切顺利。我的问题是为什么?我认为 (1,2) (2,1) 对于复合主键 (request_to , request_from ) 也是重复的
我的 sql 查询:
INSERT INTO `friends` (`request_to`, `request_from`, `confirmed`, `date_confirmation`) VALUES ('11', '12', b'1', NULL), ('12', '11', '', NULL)
解决方案
request_to
您在和上有一个主键request_from
。
这意味着您不能在此列中插入重复值。在您失败的示例中,(1, 2)
是重复的。在你的例子中,(1, 2) <> (2, 1)
,所以没关系(对于这个约束)。
如果无论方向如何都想要唯一性,请添加唯一性约束:
create unique index unq_friends_to_from on
friends(least(request_to, request_from), greatest(request_to, request_from));
推荐阅读
- python - 连续两次调用 cursor.execute() 会产生不一致的结果
- php - 401 Unauthorized 尝试调用谷歌云功能时
- python - 如何仅修补 django rest 框架中嵌套序列化程序的外键?
- c++ - 为什么 Sublime Text 不执行我的程序?编译器问题?
- javascript - 在 Android Studio MainActivity4 中无法打开
- html - 为表格列添加样式
- php - Laravel validate() 方法在 false 时返回 index html 页面
- git - 为什么在 Windows 中使用“git bash”时,它与在 Windows 中打开“wsl Ubuntu”时看起来不一样?
- c# - 是否有在 C# (Unity) 中编写异步委托的优雅解决方案
- git - 在 git 中将多个提交合并为一个