在 MySQL 和 H2 中删除唯一约束

Drop unique constraint in MySQL and H2

我在 CREATE 语句中有以下约束:

UNIQUE (`field_name`)

这些删除约束的命令在 MySQL 中有效,但在 H2 中无效:

DROP INDEX `field_name` ON `table_name`;    
ALTER TABLE `table_name` DROP INDEX `field_name`;

我需要一个可以在 MySQL 和 H2 中使用的命令(MySQL 用于真实环境,H2 用于单元测试)

找到以下解决方法:删除列会删除约束,因此:

ALTER TABLE `table_name` ADD COLUMN `tmp_code` VARCHAR(50) NOT NULL DEFAULT 'TMP';

UPDATE `table_name`
SET `tmp_code` = `field_name`;

ALTER TABLE `table_name` DROP COLUMN `field_name`;

ALTER TABLE `table_name` ADD COLUMN `field_name` VARCHAR(50) NOT NULL;

UPDATE `table_name`
SET `field_name` = `tmp_code`;

ALTER TABLE `table_name` DROP COLUMN `tmp_code`;

执行 SHOW CREATE TABLE 以查看 UNIQUE KEY 的名称。然后您可以继续进行 DROP 或 ALTER。它可能会说

UNIQUE KEY `col` (`col`),

第一个col是键名。

如果您需要维护 INDEX 但摆脱 UNIQUEness 约束,则删除该键,然后添加一个非唯一键。