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

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

我在从 MySQL Workbench 生成我的数据库图的 SQL 期间遇到问题(在组合主键的每个字段中添加了 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 约束。

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

最佳答案

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

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 图形界面上没有这些索引。

关于MySQL Workbench 生成带有不必要唯一约束的组合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18872048/

相关文章:

PHP/MySQL : error sending query to mysql database

mysql - 在 MacOS 系统启动时启动 Docker 容器

mysql - Mysql select查询中无法使用Case语句?

mysql - 有人可以告诉我 slugging percentage 查询有什么问题吗?

mysql - 以一种棘手的方式连接 MySQL 表

java - Spring——在命令行工具中使用注解事务管理

mysql - sql GROUP BY 产生语法错误

sql - 如何按数组分组?

mysql - 根据表 Y 中的值进行小计的条件总和,与表 X 中的值一起显示。然后根据表 X 中的条件生成总计

mysql - 在mysql中比较一个表和另一个表并显示匹配的记录