Dan*_*ank 4 mysql constraint mysql-5.6
假设我有四列
| x | y | z | w |
Run Code Online (Sandbox Code Playgroud)
我想要以下约束:
如果w是NULL,那么x,y,z必须是唯一的。
如果w不是NULL,则x,y,w必须是唯一的。
这可能吗?
首先,对于约束编号 2,不需要什么特别的。一个UNIQUE约束忽略-和接受-NULL值,因此一个简单的唯一约束(w,x,y)将工作得很好执行这一点。
对于约束编号 1,我认为 5.6 版中没有使用 DDL 的方法,因此您最好的选择可能是 @stefan 的触发器解决方案。
如果可以升级到 5.7,则可以GENERATED在其上使用列和唯一索引:
ALTER TABLE t
ADD wz int GENERATED ALWAYS AS (CASE WHEN w IS NULL THEN z END),
ADD UNIQUE INDEX x_y_z_uq (x, y, wz) ;
Run Code Online (Sandbox Code Playgroud)