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

时间:2013-09-18 12:16:54

标签: mysql sql mysql-workbench composite-primary-key

从MySQL Workbench生成数据库图表时出现问题(在组合主键的每个字段中都添加了UNIQUE约束)。

我有以下图表:https://dl.dropboxusercontent.com/u/3843729/baza.png

此外,它具有以下属性集:https://dl.dropboxusercontent.com/u/3843729/indexes.png

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;

如您所见,'User_id'和'Menu_id'具有 UNIQUE 关键字,因此我无法在两行中插入单个user_id(或menu_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);

不执行第二个插入语句,因为user_id必须是唯一的。

注意:如果我在MySQL Workbench中创建新图表,一切正常,生成的SQL没有问题UNIQUE约束。

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

1 个答案:

答案 0 :(得分:0)

首先找到唯一约束名称:

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

因为unique constraints are handled as indexes on MySQL你可以尝试确保在MySQL图形界面上没有这些索引。