【发布时间】:2013-09-18 12:16:53
【问题描述】:
我在从 MySQL Workbench 生成我的数据库图的 SQL 过程中遇到问题(在组合主键的每个字段中添加了唯一约束)。
我有下图: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 约束。
如何在不创建新图表的情况下移除这些约束?
【问题讨论】:
-
我是否可以建议您使用自动递增的主键并在
user_id, menu_id上放置一个唯一索引? -
这是一种解决方法,但是我想知道为什么它在我的图表中不起作用,并且在新创建的图表中,相同的场景会生成良好的 SQL 代码。此外,我的架构中有很多类似的聚合表,我不想修改它们。
标签: mysql sql mysql-workbench composite-primary-key