mysql的带特定值的联合唯一性约束可以吗?

deprecatedgb 2016-06-12 05:16:15
比如这个表

CREATE TABLE `COMPOSITE_UNIQUE_KEY` (
`ID` int(11) NOT NULL,
`NAME` varchar(255) NOT NULL,
`TYPE` int(11) NOT NULL,
`IS_DELETE` tinyint(1) NOT NULL DEFAULT '0',
`UPDATE_TIME` datetime DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `compositeUnique` (`NAME`,`TYPE`,`IS_DELETE`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我想NAME,TYPE,IS_DELETE具有联合唯一性约束,但是只有当IS_DELETE=0时生效,这样怎么弄?

举个例子
NAME TYPE IS_DELETE
a 0 0
b 0 0
这样是不被允许的

a 0 1
b 0 0
这样是可以的

a 0 1
b 0 1
这样也可以


...全文
357 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2016-06-13
  • 打赏
  • 举报
回复
没有办法直接通过索引约束实现,可以在INSERT/UPDATE触发器中进行检查。
cdutfly 2016-06-13
  • 打赏
  • 举报
回复
暂时没有。 只有针对列值的约束 还没有针对特定值的约束 。
deprecatedgb 2016-06-13
  • 打赏
  • 举报
回复
引用 1 楼 cdutfly 的回复:
你这个不符合唯一约束啊 IsDelete只是个标志位 不要加约束 即使重复了 这个应该在你程序里面加入判断。。。
我要的 正是 IS_DELETE=0 时的联合唯一约束,这又有何不可呢? 程序里实现是可以的,但是我想知道目前在mysql表一级实现这种带特定值的联合约束,不知道行不行
cdutfly 2016-06-12
  • 打赏
  • 举报
回复
你这个不符合唯一约束啊 IsDelete只是个标志位 不要加约束 即使重复了 这个应该在你程序里面加入判断。。。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧