mysql数据表设计,多字段联合唯一索引怎么设置。
前提是,表中有个is_del字段。0代表未删除,1代表逻辑删除。
怎么设置code和name字段的联合唯一索引。只针对is_del = 0时生效?
试一试这样
CREATE TABLE table_name (
id INT PRIMARY KEY,
code INT,
name VARCHAR(255),
is_del INT,
UNIQUE INDEX idx_code_name (code, name, is_del),
INDEX idx_is_del (is_del)
);
DELETE t1 FROM table_name t1
INNER JOIN table_name t2 ON t1.code = t2.code AND t1.name = t2.name AND t1.is_del = t2.is_del
WHERE t1.id > t2.id;
创建一个包含is_del = 0条件的虚拟列(computed column)。
基于虚拟列创建联合唯一索引。
给你举个模板:
-- 步骤1:创建虚拟列
ALTER TABLE 表名
ADD COLUMN is_del_0 TINYINT(1) GENERATED ALWAYS AS (CASE WHEN is_del = 0 THEN 1 ELSE NULL END) STORED;
-- 步骤2:创建联合唯一索引
CREATE UNIQUE INDEX idx_code_name_is_del_0 ON 表名 (code, name, is_del_0);
把表名替换为你的实际表名。