ALTER TABLE `user`
ADD COLUMN `cdkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT 'CD-Key',
ADD COLUMN `erp_userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT 'ERP用戶ID',
ADD UNIQUE INDEX `uniq_cdkey_erp_userid`(`cdkey`, `erp_userid`) USING BTREE;
當前表:
CREATE TABLE `user` (
`id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id',
`username` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用戶名',
`password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密碼',
`nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '昵稱',
`mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '手機號碼',
`email` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '郵箱',
`header` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '頭像',
`gender` tinyint(4) UNSIGNED NULL DEFAULT 0 COMMENT '性別, 0男, 1女',
`status` tinyint(4) UNSIGNED NULL DEFAULT 0 COMMENT '啟用狀態:0正常,1鎖定。',
`social_uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '社交用戶在社交軟件的id',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注冊時間',
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
`level` tinyint(4) UNSIGNED NULL DEFAULT 1 COMMENT '用戶等級。 0:管理員, 1:普通用戶, 2:vip用戶, 3:游客',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uniq_mobile`(`mobile`) USING BTREE,
UNIQUE INDEX `uniq_username`(`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '會員' ROW_FORMAT = Dynamic;
?
如果當前表中已存在數據,并且你添加了cdkey
和erp_userid
字段后,默認情況下這兩個字段的值會是NULL。在這種情況下,將這兩個字段合起來創建唯一索引不會立即引發任何沖突,因為NULL值在唯一索引中被視為不相同(即,多個NULL值在唯一索引中是允許的)。因此,即使多行的cdkey
和erp_userid
都是NULL,它們也不會違反新增的聯合唯一索引規則。
但是,需要注意的是,一旦開始為這些字段插入非NULL值,就必須確保每一對(cdkey, erp_userid)的組合是唯一的,否則將會違反唯一索引約束,導致插入或更新操作失敗。