想实现:
保证状态:启用,id相同的唯一?
就是不能出现:
id:1 状态:启用
id:1 状态:启用
id:1 状态: 作废
id:1 状态: 作废
但是可以:
id:1 状态:启用
id:1 状态: 作废
id:1 状态: 作废
id:1 状态: 作废
id:1 状态: 作废
通过虚拟列,用if来生成check,如果状态1,就读取id,否则就换一个逻辑,这里是通用日期,然后再把check进去unique唯一
CREATE TABLE `test` ( `id` int NOT NULL, `status` int DEFAULT NULL, `check` varchar(50) COLLATE utf8mb4_general_ci GENERATED ALWAYS AS (if((`status` = 1),`id`,concat(`id`,_utf8mb4'_',`time`))) VIRTUAL, `time` datetime DEFAULT NULL, UNIQUE KEY `uni_check` (`check`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
ALTER table cash drop column `check` -- 删除字段 -- add 增加 -- modify 修改字段类型 ALTER table cash ADD column `check` varchar(250) COLLATE utf8mb4_unicode_ci GENERATED ALWAYS AS (if(`isCancel` = 0,concat(`year`,_utf8mb4'_',`month`,_utf8mb4'_',`cashTypeId`),concat(`year`,_utf8mb4'_',`month`,_utf8mb4'_',`cashTypeId`,_utf8mb4'_',`createDate`,_utf8mb4'_',IFNULL(`lastDateCash`,'0')))) VIRTUAL AFTER `month`
最新评论 0