2

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キーワードがあるため、次のように 1 つの user_id (または menu_id) を 2 つの行に挿入することはできません。

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 は一意でなければならないため、2 番目の挿入ステートメントは実行されません。

注: MySQL Workbench で新しいダイアグラムを作成すると、すべてが正常に機能し、生成された SQL には問題のある UNIQUE 制約がありません。

新しいダイアグラムを作成せずにこれらの制約を削除するにはどうすればよいですか?

4

1 に答える 1

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

また、一意の制約は MySQL ではインデックスとして処理されるため、MySQL のグラフィカル インターフェイスにこれらのインデックスがないことを確認してください。

于 2013-09-18T13:34:31.690 に答える