MySQL Workbench生成带有不必要的唯一约束的组合主键

MySQL Workbench生成带有不必要的唯一约束的组合主键,mysql,sql,mysql-workbench,composite-primary-key,Mysql,Sql,Mysql Workbench,Composite Primary Key,在从MySQL Workbench生成数据库关系图的SQL过程中,我遇到了一个问题,在组合主键的每个字段中都添加了唯一的约束 我有以下图表: 此外,它还具有以下属性集: 生成的SQL: CREATE TABLE IF NOT EXISTS `test`.`User_has_Menu` ( `User_id` BIGINT UNIQUE NOT NULL, `Menu_id` BIGINT UNIQUE NOT NULL, PRIMARY KEY (`User_id`, `Menu_id`),

在从MySQL Workbench生成数据库关系图的SQL过程中,我遇到了一个问题,在组合主键的每个字段中都添加了唯一的约束

我有以下图表:

此外,它还具有以下属性集:

生成的SQL:

CREATE TABLE IF NOT EXISTS `test`.`User_has_Menu` (
 `User_id` BIGINT UNIQUE NOT NULL,
 `Menu_id` BIGINT UNIQUE NOT NULL,
PRIMARY KEY (`User_id`, `Menu_id`),
INDEX `fk_User_has_Menu_Menu1_idx` (`Menu_id` ASC),
INDEX `fk_User_has_Menu_User1_idx` (`User_id` ASC),
CONSTRAINT `fk_User_has_Menu_User1`
 FOREIGN KEY (`User_id`)
REFERENCES `test`.`User` (`id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION,
CONSTRAINT `fk_User_has_Menu_Menu1`
 FOREIGN KEY (`Menu_id`)
REFERENCES `test`.`Menu` (`id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION)
ENGINE = InnoDB;
如您所见,“用户id”和“菜单id”具有唯一的关键字,因此我无法在两行中插入单个用户id或菜单id,例如:

insert into user_has_menu (user_id, menu_id) values (1,1);
insert into user_has_menu (user_id, menu_id) values (1,3);
未执行第二条insert语句,因为用户id必须唯一

注意:如果我在MySQL Workbench中创建新的图表,那么一切都正常工作,并且生成的SQL没有问题的唯一约束


如何在不创建新图表的情况下删除这些约束?

首先查找唯一的约束名称:

select * 
from
    information_schema.key_column_usage
where
    and table_schema = 'my_database' 
    and table_name = 'my_table'
然后放下它们

alter table my_table drop index my_contraint

因为您可以尝试确保MySQL图形界面上没有这些索引。

我建议您使用一个自动递增的主键,在用户id、菜单id上放置一个唯一的索引。这是一个解决方法,但我想知道为什么它在我的图中不起作用,在新创建的一个场景中,相同的场景会生成良好的SQL代码。此外,我的模式中有很多simlar agregation表,我不想修改它们。这只是另一种解决方法,我希望MySQL Workbench能够生成没有这些唯一约束的代码。如图所示,我没有在任何地方指定这些约束。a可以在FKs上看到类型索引。。。看看是否可以删除它,或者尝试编辑表之间的连接。我想我告诉过你要尝试在图形界面上删除它们,如果你不能,那么你必须手动删除这些约束。我无法在GUI上删除它们。。非常奇怪的是,当我创建新的图表并放置相同的表并创建连接时,SQL代码并没有生成这些唯一的约束。我知道|我可以手动删除它们,但事实并非如此,因为我希望生成的SQL代码正常,因为我正在大量修改数据库。是的,请查找附加结果:然后删除fks,然后将索引添加到要引用的列,然后添加外键。