sql >> データベース >  >> RDS >> Mysql

MySQLのスクリプトからデータベースを作成する方法

    MySQLのスクリプトからデータベースを作成するには:

    1. MySQLWorkbenchで[クエリ]タブを開きます
    2. CREATE DATABASEを実行します またはCREATE SCHEMA データベースを作成するステートメント(以下の例)

    これにより、新しいデータベースが作成されます。

    スクリプトは、CREATE DATABASE myDatabase;のように単純にすることができます。 ただし、これにより空のデータベースが作成されます。テーブルやその他のデータベースオブジェクトは作成されません。それらを作成するには、CREATE TABLEを含める必要があります およびスクリプト内の他のステートメント。

    サンプルスクリプト

    以下は、データベースを作成するスクリプトの例です。

    空のデータベースを作成する

    次のステートメントは、「音楽」と呼ばれる空のデータベースを作成します。テーブルは作成されません。

    CREATE DATABASE Music;
    

    次のステートメントはまったく同じことを行います(CREATE SCHEMA CREATE DATABASEの同義語です )。どちらを使用するかを選択できます。

    CREATE SCHEMA Music;
    

    しかし、それがすでに存在する場合はそうではありません…

    IF NOT EXISTSを追加する データベースがまだ存在しない場合にのみデータベースを作成します。

    CREATE DATABASE IF NOT EXISTS Music;
    

    または、すでに存在する場合は削除します…

    DROP DATABASE IF EXISTS;で始まる データベースがすでに存在する場合は、データベースを削除します。次に、CREATE DATABASE ステートメントは先に進み、指定されたとおりに新しいデータベースを作成できます。

    DROP DATABASE IF EXISTS Music;
    CREATE DATABASE Music;
    

    テーブルを使用した単純なデータベース

    次のスクリプトは、データベースを作成し(データベースがまだ存在しない場合)、2つの列を持つテーブルを作成します。列のデータ型を設定し、ActorId列を主キーとして設定します。

    CREATE DATABASE Movies;
    USE Movies ;
    
    CREATE TABLE Actors (
     ActorId INT NOT NULL AUTO_INCREMENT,
     ActorName VARCHAR(255) NOT NULL,
     PRIMARY KEY (ActorId));
    

    3つのテーブルを持つデータベース

    次のスクリプトは、MySQL Workbenchを使用して図から生成されたものであり、上記の例よりも完全です。

    これは、この名前の既存のデータベースをすべて削除してから、データベースを作成し、テーブル、列、およびそれらのデータ型を作成します。また、主キーと外部キーの制約を使用してテーブル間の関係を設定します。

    また、スクリプトの上部には、一連のSETがあります。 一意キーおよび外部キーチェックを無効にするステートメント。スクリプトが実行された後、これらは下部で再び有効になります。

    この手法は通常、関係のあるテーブルにデータを挿入するときに使用されます。これを行わないと、すべてのデータがまだ挿入されていないという理由だけで、些細なエラーが発生する可能性があります(たとえば、関連する主キーフィールドに入力する前に外部キーフィールドに入力する場合)。

    -- MySQL Script generated by MySQL Workbench
    -- Mon May 30 11:25:32 2016
    -- Model: New Model Version: 1.0
    -- MySQL Workbench Forward Engineering
    
    SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
    
    -- -----------------------------------------------------
    -- Schema Music
    -- -----------------------------------------------------
    DROP SCHEMA IF EXISTS `Music` ;
    
    -- -----------------------------------------------------
    -- Schema Music
    -- -----------------------------------------------------
    CREATE SCHEMA IF NOT EXISTS `Music` DEFAULT CHARACTER SET utf8 ;
    USE `Music` ;
    
    -- -----------------------------------------------------
    -- Table `Music`.`Artists`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `Music`.`Artists` ;
    
    CREATE TABLE IF NOT EXISTS `Music`.`Artists` (
     `ArtistId` INT NOT NULL AUTO_INCREMENT,
     `ArtistName` VARCHAR(255) NOT NULL,
     PRIMARY KEY (`ArtistId`));
    
    
    -- -----------------------------------------------------
    -- Table `Music`.`Genres`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `Music`.`Genres` ;
    
    CREATE TABLE IF NOT EXISTS `Music`.`Genres` (
     `GenreId` INT NOT NULL AUTO_INCREMENT,
     `Genre` VARCHAR(255) NOT NULL,
     PRIMARY KEY (`GenreId`));
    
    
    -- -----------------------------------------------------
    -- Table `Music`.`Albums`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `Music`.`Albums` ;
    
    CREATE TABLE IF NOT EXISTS `Music`.`Albums` (
     `AlbumId` INT NOT NULL AUTO_INCREMENT,
     `AlbumName` VARCHAR(255) NOT NULL,
     `DateReleased` DATETIME NOT NULL,
     `ArtistId` INT NOT NULL,
     `GenreId` INT NOT NULL,
     PRIMARY KEY (`AlbumId`),
     INDEX `ArtistId_idx` (`ArtistId` ASC),
     INDEX `GenreId_idx` (`GenreId` ASC),
     CONSTRAINT `ArtistId`
     FOREIGN KEY (`ArtistId`)
     REFERENCES `Music`.`Artists` (`ArtistId`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
     CONSTRAINT `GenreId`
     FOREIGN KEY (`GenreId`)
     REFERENCES `Music`.`Genres` (`GenreId`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT);
    
    
    SET [email protected]_SQL_MODE;
    SET [email protected]_FOREIGN_KEY_CHECKS;
    SET [email protected]_UNIQUE_CHECKS;
    

    1. MySQLでは、コミットするまで参照整合性チェックを延期できますか?

    2. MySQL InnoDBの挿入が非常に遅いのはなぜですか?

    3. テキスト表現の16進数を10進数に変換します

    4. MySQLでauto_incrementID列の断片化を処理する方法