SQL DDLデータ定義文

11735 ワード

前言
  • DDL(Data Definition Language)文:データ定義語句、これらの語句は異なるデータセグメント、データベース、テーブル、列、索引などのデータベースオブジェクトを定義しています。よく使う語句のキーワードは主にcreate、drop、alterなどがあります。
  • 1、DDLデータベース操作文
  • )データベースステートメント
    #      ,           utf8mb4
    # create database     ;
    > create database test;
    
        Query OK, 1 row affected (0.04 sec)
    
    #      ,        
    # create database      character set    ;
    > create database test character set gbk;
    
        Query OK, 1 row affected (0.02 sec)
  • を作成します。
  • )データベースステートメントを削除する
    #      
    # drop database     ;
    > drop database test;
    
        Query OK, 0 rows affected (0.05 sec)
    #      ,          
    # drop database if exists     ;
    > drop database if exists test;
    
        Query OK, 0 rows affected (0.01 sec)
  • )すべてのデータベースステートメントを表示する
    #        
    > show databases;
    
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | performance_schema |
        | mysql              |
        | sys                |
        +--------------------+
        4 rows in set (0.01 sec)
  • システムが自動的に作成したデータベース
  • 上の表示結果の4つのデータベースは、MySQLをインストールするときに自動的にシステム(macOS)が作成されます。
  • information_schema:主にシステムのデータベースオブジェクト情報の一部を記憶しています。ユーザテーブル情報、列情報、権限情報、文字セット情報、パーティション情報などに及ばないです。
  • performance_schema:主にデータベースサーバの性能パラメータを収集するために用いられます。
  • mysql:権限設定、イベント、エンジン状態、主従情報、ログ、タイムゾーン情報、ユーザ権限設定などを含む。
  • sys:performance_schemaの代替案
  • )データベースの作成情報文
    #          
    # show create database     ;
    > show create database test;
    
        +----------+---------------------------------------------------------------------------------------------+
        | Database | Create Database                                                                             |
        +----------+---------------------------------------------------------------------------------------------+
        | test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ |
        +----------+---------------------------------------------------------------------------------------------+
        1 row in set (0.00 sec)
  • を表示する。
  • )動作のデータベースステートメントを選択する
    #         
    # use     ;
    > use test;
    
        Database changed
  • )操作中のデータベースステートメント
    #           
    > select database();
    
        +------------+
        | database() |
        +------------+
        | test       |
        +------------+
        1 row in set (0.00 sec)
  • を表示する。
  • )データベース語句を導出する
    #      ,             
    # mysqldump -u     -p      >           .sql;
    $ mysqldump -u root -p test > /Users/qianchia/Desktop/test.sql;
    
        Enter password: 
    #      ,         
    # mysqldump -u     -p -d      >           .sql;
    $ mysqldump -u root -p -d test > /Users/qianchia/Desktop/test.sql;
    
        Enter password: 
    #      
    # mysqldump -u     -p --quick --no-create-info --extended-insert --default-character-set=         >      .sql
    $ mysqldump -u root -p --quick --no-create-info --extended-insert --default-character-set=latin1 test> /Users/qianchia/Desktop/test.sql
  • --quick:大きいテーブルをリザーブするためのオプションです。Msqldumpはすべての行を検索するのではなく、サーバーから一行ずつテーブルの行を強制的に検索し、出力する前にメモリにキャッシュします。
  • --extended-insert:いくつかのvaluesリストを含む複数行のinsert文法を使用する。このようにしてリポジットファイルをより小さくし、ファイルをリロードする時に挿入を加速することができます。
  • --no-create-info:各リポジトリのcreate table文を導出しない。
  • --default-character-set=latin1:元の文字セットからすべてのデータを導出し、このように導出したファイルの中には、すべての中国語が見られ、文字化けが保存されない。
  • 導出データベースは、システムコマンドモードで動作する。
  • )データベース語句を導入する
    #      / 
    # source          .sql;
    > source /Users/qianchia/Desktop/test.sql;
    
        Query OK, 0 rows affected (0.00 sec)
        Query OK, 0 rows affected (0.01 sec)
        ...
        Query OK, 3 rows affected (0.00 sec)
        Records: 3  Duplicates: 0  Warnings: 0
    #      / 
    # mysql -u     -p      <          .sql
    $ mysql -u root -p test < /Users/qianchia/Desktop/testdbcreatetab.sql
  • データベースの導入は、オペレーティングデータベースが選択された後、mysqlコマンドモードで行われる。
  • 2、DDL表の操作文
  • )表語句
    #    
    # create table    (
                    (  )     ,
                    (  )     
      ) [default charset =     ];
    > create table student (
          no int,
          name varchar(20),
          age int,
          score int
      );
    
        Query OK, 0 rows affected (0.08 sec)
    #    ,  
    
    > create table student (
          no int unique,                           //       
          name varchar(20) not null,               //       
          age int,
          score int
      );
    
    > create table student (
          no int primary key,                      //       
          name varchar(20),
          age int,
          score int
      );
    
    > create table student (
          no int,
          name varchar(20),
          age int,
          score int
    
          primary key(no)                          //       
      );
    
    > create table student (
          no int primary key auto_increment,       //         
          name varchar(20),
          age int,
          score int
      );
    
    > create table A (
          ano int primary key,
          aname varchar(20),
          loc varchar(100)
      );
    
    > create table B (
          bno int primary key,
          bname varchar(20),
    
          bano int,
          # constraint      foreign key(    ) references   (    )
          constraint fk_a_b foreign key(bano) references A(ano)                //       
      );
  • を作成する。
  • )表語句を削除する
    #    
    # drop table   ;
    > drop table student;
    
        Query OK, 0 rows affected (0.07 sec)
    #    ,        
    # drop table if exists   ;
    > drop table if exists student;
    
        Query OK, 0 rows affected (0.06 sec)
  • )すべての表語句を表示する
    #      
    > show tables;
    
        +----------------+
        | Tables_in_test |
        +----------------+
        | A              |
        | B              |
        | student        |
        +----------------+
        3 rows in set (0.00 sec)
  • )表示テーブルの作成情報文
    #        
    > show create table student;
    
        +---------+--------------------------------------------------------------------------------------------------+
        | Table   | Create Table                                                                                     |
        +---------+--------------------------------------------------------------------------------------------------+
        | student | CREATE TABLE `student` (
                                            `no` int(11) NOT NULL AUTO_INCREMENT,
                                            `name` varchar(20) NOT NULL,
                                            `age` int(11) DEFAULT NULL,
                                            `score` int(11) DEFAULT NULL,
                                            PRIMARY KEY (`no`)
                                           ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci        |
        +---------+--------------------------------------------------------------------------------------------------+
        1 row in set (0.01 sec)
  • )テーブルのデータ構造文
    #         
    # desc    ;
    > desc student;
    
        +-------+-------------+------+-----+---------+----------------+
        | Field | Type        | Null | Key | Default | Extra          |
        +-------+-------------+------+-----+---------+----------------+
        | no    | int(11)     | NO   | PRI | NULL    | auto_increment |
        | name  | varchar(20) | NO   |     | NULL    |                |
        | age   | int(11)     | YES  |     | NULL    |                |
        | score | int(11)     | YES  |     | NULL    |                |
        +-------+-------------+------+-----+---------+----------------+
        4 rows in set (0.01 sec)
  • を表示する。
  • )表文の名前を変更する
    #     
    # alter table      rename [to]     ;
    > alter table student rename [to] stu;
    
        Query OK, 0 rows affected (0.02 sec)
    #     
    # rename table      to     ;
    > rename table student to stu;
    
        Query OK, 0 rows affected (0.08 sec)
  • )表の文字セットステートメントを変更する
    #        
    # alter table     cahracter set    ;
    > alter table student character set gbk;
    
        Query OK, 0 rows affected (0.05 sec)
        Records: 0  Duplicates: 0  Warnings: 0
  • )表語句を導出する
    #          ,          
    # mysqldump -u     -p         >           .sql;
    $ mysqldump -u root -p test student > /Users/haiqianj/Desktop/test.sql;
    
        Enter password: 
    #          ,      
    # mysqldump -u     -p -d         >           .sql;
    $ mysqldump -u root -p -d test student > /Users/haiqianj/Desktop/test.sql;
    
        Enter password: 
  • 導出テーブルは、システムコマンドモードで動作する。
  • )表語句を導入する
    #    /   
    # source          .sql;
    > source /Users/qianchia/Desktop/test.sql;
    
        Query OK, 0 rows affected (0.00 sec)
        Query OK, 0 rows affected (0.01 sec)
        ...
        Query OK, 3 rows affected (0.00 sec)
        Records: 3  Duplicates: 0  Warnings: 0
  • 導入テーブルは、オペレーティングデータベースが選択された後、mysqlコマンドモードで動作する。
  • 3、DDL列フィールド操作文
  • )列文を追加する
    #    ,    
    # alter table 
            
      add [column] 
               [  ] [first | after    ];
    > alter table student add cla varchar(20);
    
        Query OK, 0 rows affected (0.04 sec)
        Records: 0  Duplicates: 0  Warnings: 0
    #    ,    
    # alter table 
            
      add [column] 
               [  ] [first | after    ],
      add [column]  
                [  ] [first | after    ], 
       ...;
    > alter table student add cla varchar(20), add addr varchar(100);
    
        Query OK, 0 rows affected (0.02 sec)
        Records: 0  Duplicates: 0  Warnings: 0
  • )列文を削除する
    #    ,    
    # alter table 
            
      drop [column] 
           ;
    > alter table student drop address;
    
        Query OK, 0 rows affected (0.10 sec)
        Records: 0  Duplicates: 0  Warnings: 0
    #    ,    
    # alter table 
            
      drop [column] 
           , 
      drop [column] 
           , 
      ...;
    > alter table student drop class, drop address;
    
        Query OK, 0 rows affected (0.11 sec)
        Records: 0  Duplicates: 0  Warnings: 0
  • )列名語句を修正する
    #      ,      
    # alter table 
            
      change [column] 
             
                [  ] [first | after    ];
    > alter table student change cla class int;
    
        Query OK, 0 rows affected (0.10 sec)
        Records: 0  Duplicates: 0  Warnings: 0
    #      ,      
    # alter table 
            
      change [column] 
             
                [  ] [first | after    ],
      change [column]
             
                [  ] [first | after    ],
      ...;
    > alter table student change cla class int, change addr address varchar(100);
    
        Query OK, 0 rows affected (0.10 sec)
        Records: 0  Duplicates: 0  Warnings: 0
  • )列属性語句を修正する
    #      ,            
    # alter table 
            
      modify [column] 
               [  ] [first | after    ];
    > alter table student modify cla int;
    
        Query OK, 0 rows affected (0.11 sec)
        Records: 0  Duplicates: 0  Warnings: 0
    #      ,            
    # alter table 
            
      modify [column] 
               [  ] [first | after    ], 
      modify [column] 
               [  ] [first | after    ], 
      ...;
    > alter table student modify cla int, modify addr varchar(200);
    
        Query OK, 0 rows affected (0.10 sec)
        Records: 0  Duplicates: 0  Warnings: 0
  • )列順序文を修正する
  • 上のadd、change、modify文の中の任意のパラメータ[first_after列名]は、古い修正フィールドの表中の位置を使用することができる。
  • first:すべての列の一番前に置く
  • after列名:指定列の後に置く
  • 注意:change、first、after columnこれらのキーワードはすべてMySQLの標準SQL上の拡張に属し、他のデータベースでは必ずしも適用されない。