MySQL Workbenchは以下からDL出来ます。
http://dev.mysql.com/downloads/workbench/
ログイン(サインアップ)画面の"No thanks, just start my download."からアカウント無しでDL可能です。(Twitterでご教示頂きました。有難うございます。)
(1)
MySQL Workbenchで以下のような設計をして、DBを作成します。
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF NOT EXISTS `mwb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; USE `mwb` ; -- ----------------------------------------------------- -- Table `mwb`.`users` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mwb`.`users` ( `id` INT NOT NULL , `name` VARCHAR(255) NOT NULL , `age` INT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;(2)
MySQL Workbenchで以下のような設計に修正します。修正内容は適当です。尚、MySQL Workbench上で修正しただけで、実際に実行はしません。
* users.nameをnull可に
* users.nameにインデックス"idx"を追加
* users.school_idを追加(外部キー)
* users.ageをusers.school_idの下に
* users.ageをnull不可に
* schoolsテーブル追加
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; -- ----------------------------------------------------- -- Table `mwb`.`schools` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mwb`.`schools` ( `id` INT NOT NULL , `name` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `mwb`.`users` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mwb`.`users` ( `id` INT NOT NULL , `school_id` INT NOT NULL , `age` INT NOT NULL , `name` VARCHAR(255) NULL , PRIMARY KEY (`id`) , INDEX `fk_users_schools_idx` (`school_id` ASC) , INDEX `idx` (`name` ASC) , CONSTRAINT `fk_users_schools` FOREIGN KEY (`school_id` ) REFERENCES `mwb`.`schools` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;(3)
現在、DBは(1)の状態です。つまり、(2)にするalter tableが欲しい状態です。
MySQL Workbenchで Database > Synchronize Model...と進んで、接続情報を入力して、Continueをクリックします。その後の画面を指示通りに進めると、以下のSQLが出力されました。Executeを押すと実際に実行されるので注意して下さい。
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; ALTER TABLE `mwb`.`users` CHANGE COLUMN `age` `age` INT(11) NOT NULL AFTER `school_id` , CHANGE COLUMN `name` `name` VARCHAR(255) NULL DEFAULT NULL , ADD COLUMN `school_id` INT(11) NOT NULL AFTER `id` , ADD CONSTRAINT `fk_users_schools` FOREIGN KEY (`school_id` ) REFERENCES `mwb`.`schools` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION , ADD INDEX `fk_users_schools_idx` (`school_id` ASC) , ADD INDEX `idx` (`name` ASC) ; CREATE TABLE IF NOT EXISTS `mwb`.`schools` ( `id` INT(11) NOT NULL , `name` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;alter tableが正しく出力されない場合は、MySQL WorkbenchのSchema Nameと実際のDB名が一致していない可能性があります。
P.S.
ER MasterはDBインポートからのドキュメント自動生成専用で使うことにする。。。
No comments:
Post a Comment