MySQL:テーブルの作成、変更、削除

67921 ワード

実は多くの人にとってSQL文に対してすでに多く忘れて、あるいは多くのことを知らないで、データベースのグラフィックの操作ソフトがあるため、みんなを便利にして、しかし私达は最も根本的なものを忘れることができなくて、特にいくつかの细部の上のもの、あなたはHibernateを使い慣れたかもしれなくて、SQL文を书く必要はありませんが、どんなプロジェクトも大きなフレームワークを使うのではありませんか、もし使わないならば、では、データベースを操作できないのではないでしょうか.だから、私たちはよく知っておいたほうがいいです.これから仕事を探したり、仕事を探したりするのに役立ちます.
テーブルの作成、変更、削除について説明する前に、操作の簡単な説明を行います.
  1.データベースシステムへのログイン
コマンドラインでMySQLデータベース管理システムにログインし、内容を入力します.
mysql -h localhost -u root -p

多くの人がこれを知っていますが、パラメータの具体的な表示は何なのか、私たちはまだ理解しなければなりません.このうち、「-h」パラメータは接続されたホスト名を指しているので、後ろはlocalhostです.「-u」パラメータはユーザー名を表し、ここでのユーザー名はrootである.「-p」パラメータはユーザーのパスワードを表し、Enterキーを押すと「Enter password:」と表示され、パスワードを入力するとログインできます.
  2.データベースの作成
データベースを作成する前に、既存のデータベースを表示できます.
mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| community          |

| community_test     |

| data               |

| mydata             |

| mysql              |

| performance_schema |

| test               |

+--------------------+

8 rows in set (0.04 sec)

データベースの作成形式:CREATE DATABASEデータベース名;
例:exampleという名前のデータベースを作成する
mysql>  CREATE DATABASE example;

Query OK, 1 row affected (0.00 sec)



mysql>  SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| community          |

| community_test     |

| data               |

| example            |

| mydata             |

| mysql              |

| performance_schema |

| test               |

+--------------------+

9 rows in set (0.00 sec)

  3.データベースの削除:
フォーマット:DROP DATABASEデータベース名;
例:exampleデータベースの削除
mysql>  DROP DATABASE example;

Query OK, 0 rows affected (0.07 sec)



mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| community          |

| community_test     |

| data               |

| mydata             |

| mysql              |

| performance_schema |

| test               |

+--------------------+

8 rows in set (0.00 sec)

  4.データベースストレージエンジン
ストレージエンジンとはテーブルのタイプを指し、データベースストレージエンジンはテーブルのコンピュータでのストレージ方式を決定する.
MySQLでストレージエンジンを問い合わせるタイプコマンド:SHOW ENGINES;
mysql> SHOW ENGINES;

+--------------------+---------+------------------------------------------------

----------------+--------------+------+------------+

| Engine             | Support | Comment

                | Transactions | XA   | Savepoints |

+--------------------+---------+------------------------------------------------

----------------+--------------+------+------------+

| FEDERATED          | NO      | Federated MySQL storage engine

                | NULL         | NULL | NULL       |

| MRG_MYISAM         | YES     | Collection of identical MyISAM tables

                | NO           | NO   | NO         |

| MyISAM             | YES     | MyISAM storage engine

                | NO           | NO   | NO         |

| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to

 it disappears) | NO           | NO   | NO         |

| CSV                | YES     | CSV storage engine

                | NO           | NO   | NO         |

| MEMORY             | YES     | Hash based, stored in memory, useful for tempor

ary tables      | NO           | NO   | NO         |

| ARCHIVE            | YES     | Archive storage engine

                | NO           | NO   | NO         |

| InnoDB             | DEFAULT | Supports transactions, row-level locking, and f

oreign keys     | YES          | YES  | YES        |

| PERFORMANCE_SCHEMA | YES     | Performance Schema

                | NO           | NO   | NO         |

+--------------------+---------+------------------------------------------------

----------------+--------------+------+------------+

9 rows in set (0.00 sec)

クエリー結果では、Engineパラメータはストレージエンジン名を指します.Supportパラメータは、MySQLがこのタイプのエンジンをサポートしているかどうかを示します.Commentパラメータはエンジンに対するコメントを表します.Transactionパラメータは、トランザクションがサポートされているかどうかを示します.XAパラメータは、分散取引処理のXA仕様を示す.Savepointsパラメータは、トランザクションのロールバック操作を容易にするためにセーブポイントがサポートされているかどうかを示します.InnoDBストレージエンジンはdefault、つまりデータベースのデフォルトのストレージエンジンであることがわかりますが、InnoDBについて簡単に説明します.
InnoDBはMySQLのストレージエンジンで、InnoDBはMySQLにトランザクション、ロールバック、クラッシュ修復能力、およびマルチバージョン同時制御のトランザクションセキュリティを提供します.InnoDBはMySQLで初めて外部キー制約を提供するテーブルエンジンであり、トランザクションの能力も他のストレージエンジンとは比べものにならない.しかし、このエンジンの欠点は、読み書き効率がやや悪く、データ空間が比較的大きいことです.
次は正式な内容です.
テーブルの作成:
1)テーブルを作成する形式:
CREATE TABLE    (

             [      ],

             [      ],

    ...

    ...

             [      ]

);

急いでログインしてテーブルを作成し、おめでとうございます.「No database selected」というエラーが発生します.どのデータベースでテーブルを作成するかを他の人に教えていないので、作成する前にデータベースを選択します.フォーマット:USEデータベース名;
例:studentテーブルを作成します.
mysql> use example;

Database changed

mysql> CREATE TABLE student (

    -> id int,

    -> name varchar(20)

    -> );

Query OK, 0 rows affected (0.09 sec)

表を作成するときは、整合性制約に関連しています.次に、整合性制約表を示します.
こうそくじょうけん
説明
PRIMARY KEY
この属性がテーブルのプライマリ・キーであることを識別し、対応するメタ・グループを一意に識別できます.
FOREIGN KEY
このプロパティがテーブルであることを示す外部キーは、テーブルに関連付けられたプライマリ・キーです.
 NOT NULL
この属性を空にできないことを識別します.
UNIQUE
属性を識別する値は一意です
AUTO_INCREMENT
この属性を識別する値は自動的に増加します.これはMySQLのSQL文の特色です.
 DEFAULT
この属性のデフォルト値を設定
次に、上記の整合性制約の適用について説明します.
 
2)テーブルのプライマリ・キーの設定
シングルフィールドキーフォーマット:属性名データ型PRIMARY KEY
例:
mysql>  CREATE TABLE student1 (

    -> id int PRIMARY KEY,

    -> name varchar(20)

    -> );

Query OK, 0 rows affected (0.06 sec)

マルチフィールドキーフォーマット:PRIMARY KEY(属性名1、属性名2….属性名n)
例:
mysql> CREATE TABLE student2 (

    -> id int,

    -> stu_id int,

    -> name varchar(20),

    -> PRIMARY KEY(id,stu_id)

    -> );

Query OK, 0 rows affected (0.00 sec)

 
3)テーブルの外部キーの設定
形式:COSTRAINT外部キー別名FOREGN KEY(属性1,属性2,…属性n)REFERENCESテーブル名(属性1′,属性2′,…属性n′)
例:
mysql> CREATE TABLE teacher (

    -> id int PRIMARY KEY,

    -> stu_id int,

    -> name varchar(20),

    -> CONSTRAINT STUID FOREIGN KEY(stu_id) REFERENCES student1(id)

    -> );

Query OK, 0 rows affected (0.00 sec)

 
4)テーブルの空でない制約の設定
簡単に言えば、この属性の値を空にしないで、記入しないと間違いを報告します.
フォーマット:属性名データ型NOT NULL
 
5)テーブルの一意性制約の設定
この属性の値は重複できません
フォーマット:属性名データ型UNIQUE
 
6)設定テーブルの属性値が自動的に増加する
  AUTO_INCREMENT制約のフィールドは、任意の整数タイプ(TINYINT、SMALLINT、INT、BIGINT)であってもよく、デフォルトでは、このフィールドの値は1から増加します.
書式:属性名データ型AUTO_INCREMENT
 
7)表の属性のデフォルト値を設定する
フォーマット:属性名データ型DEFAULTデフォルト
  
以下に4-7をまとめた例を示します.
mysql> CREATE TABLE student3 (

    -> id int PRIMARY KEY AUTO_INCREMENT,

    -> teacher_id int UNIQUE,

    -> name varchar(20) NOT NULL,

    -> sex varchar(10) DEFAULT 'male'

    -> );

Query OK, 0 rows affected (0.01 sec)

 
テーブル構造の表示
表の基本構造文DESCRIBEの表示
フォーマット:DESCRIBEテーブル名;
表の構造を見ることで、明確に表を解読し、自分で作成した表に間違いがないかどうかを確認することができます.このSQL文は使わなければなりませんね.
例:
mysql> desc student3;

+------------+-------------+------+-----+---------+----------------+

| Field      | Type        | Null | Key | Default | Extra          |

+------------+-------------+------+-----+---------+----------------+

| id         | int(11)     | NO   | PRI | NULL    | auto_increment |

| teacher_id | int(11)     | YES  | UNI | NULL    |                |

| name       | varchar(20) | NO   |     | NULL    |                |

| sex        | varchar(10) | YES  |     | male    |                |

+------------+-------------+------+-----+---------+----------------+

4 rows in set (0.01 sec)

表詳細構造文の表示SHOW CREATE TABLE
このSQL文では、フィールド名、フィールドのデータ型、制約条件に加えて、テーブルのデフォルトのストレージエンジンと文字コードを表示できます.
フォーマット:SHOW CREATE TABLE表名;
例:
mysql> SHOW CREATE TABLE student3;

+----------+-----------------------------------

-----------------------------------------------

-----------------------------------------------

---------------------------------------------+

| Table    | Create Table





                                             |

+----------+-----------------------------------

-----------------------------------------------

-----------------------------------------------

---------------------------------------------+

| student3 | CREATE TABLE `student3` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `teacher_id` int(11) DEFAULT NULL,

  `name` varchar(20) NOT NULL,

  `sex` varchar(10) DEFAULT 'male',

  PRIMARY KEY (`id`),

  UNIQUE KEY `teacher_id` (`teacher_id`)

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

+----------+-----------------------------------

-----------------------------------------------

-----------------------------------------------

---------------------------------------------+

1 row in set (0.00 sec)

  
表の変更:
1)表名の変更
テーブル名は、1つのデータベースで一意にテーブルを決定できます.
フォーマット:ALTER TABLE旧表名RENAME新表名;
例:
mysql> ALTER TABLE student RENAME student4;

Query OK, 0 rows affected (0.11 sec)



mysql> DESCRIBE student;

ERROR 1146 (42S02): Table 'example.student' doesn't exist

上から分かるように、改名後の表はもう存在しません.
 
2)フィールドのデータ型の変更
フォーマット:ALTER TABLE表名MODIFY属性名データ型;
例:
mysql> DESCRIBE student1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   | PRI | NULL    |       |

| name  | varchar(20) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.08 sec)



mysql> ALTER TABLE student1 MODIFY name varchar(30);

Query OK, 0 rows affected (0.06 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> DESCRIBE student1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   | PRI | NULL    |       |

| name  | varchar(30) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.01 sec)

 
3)フィールド名の変更:
フォーマット:ALTER TABLE表名CHANGE旧属性名新属性名新データ型;
例:
mysql> DESCRIBE student1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   | PRI | NULL    |       |

| name  | varchar(30) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)



mysql> ALTER TABLE student1 CHANGE name stu_name varchar(40);

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> DESCRIBE student1;

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | NO   | PRI | NULL    |       |

| stu_name | varchar(40) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

ここで私が修正したフィールド名と同時にデータ型も修正しましたが、データ型を修正したくないなら元の通りに書けばいいです.
 
4)フィールドの追加
フォーマット:ALTER TABLEテーブル名ADD属性名1データ型[完全性制約][FIRST|AFTER属性名2];
ここで、「属性名1」パラメータは、追加するフィールドの名前を指します.「FIRST」パラメータはオプションのパラメータで、新しいフィールドをテーブルの最初のフィールドに設定する役割を果たします.「AFTER」パラメータもオプションのパラメータで、「属性名2」の後に新しいフィールドを追加する役割を果たします.「属性名2」はもちろん、テーブルにすでに存在するフィールドを指します
例:
mysql> DESCRIBE student1;

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | NO   | PRI | NULL    |       |

| stu_name | varchar(40) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)



mysql> ALTER TABLE student1 ADD teacher_name varchar(20) NOT NULL AFTER id;

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> DESCRIBE student1;

+--------------+-------------+------+-----+---------+-------+

| Field        | Type        | Null | Key | Default | Extra |

+--------------+-------------+------+-----+---------+-------+

| id           | int(11)     | NO   | PRI | NULL    |       |

| teacher_name | varchar(20) | NO   |     | NULL    |       |

| stu_name     | varchar(40) | YES  |     | NULL    |       |

+--------------+-------------+------+-----+---------+-------+

3 rows in set (0.01 sec)

 
5)フィールドの削除
フォーマット:ALTER TABLE表名DROP属性名;
例:
mysql> DESCRIBE student1;

+--------------+-------------+------+-----+---------+-------+

| Field        | Type        | Null | Key | Default | Extra |

+--------------+-------------+------+-----+---------+-------+

| id           | int(11)     | NO   | PRI | NULL    |       |

| teacher_name | varchar(20) | NO   |     | NULL    |       |

| stu_name     | varchar(40) | YES  |     | NULL    |       |

+--------------+-------------+------+-----+---------+-------+

3 rows in set (0.01 sec)



mysql> ALTER TABLE student1 DROP teacher_name;

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> DESCRIBE student1;

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | NO   | PRI | NULL    |       |

| stu_name | varchar(40) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

 
6)テーブルのストレージエンジンの変更
フォーマット:ALTER TABLEテーブル名ENGINE=ストレージエンジン名;
例:
mysql> SHOW CREATE TABLE student2;

+----------+----------------------------------------

----------------------------------------------------

----------------------------------------------------

| Table    | Create Table





+----------+----------------------------------------

----------------------------------------------------

----------------------------------------------------

| student2 | CREATE TABLE `student2` (

  `id` int(11) NOT NULL DEFAULT '0',

  `stu_id` int(11) NOT NULL DEFAULT '0',

  `name` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`,`stu_id`)

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

+----------+----------------------------------------

----------------------------------------------------

----------------------------------------------------

1 row in set (0.05 sec)



mysql> ALTER TABLE student2 ENGINE = MYISAM;

Query OK, 0 rows affected (0.02 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> SHOW CREATE TABLE student2;

+----------+----------------------------------------

----------------------------------------------------

----------------------------------------------------

| Table    | Create Table





+----------+----------------------------------------

----------------------------------------------------

----------------------------------------------------

| student2 | CREATE TABLE `student2` (

  `id` int(11) NOT NULL DEFAULT '0',

  `stu_id` int(11) NOT NULL DEFAULT '0',

  `name` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`,`stu_id`)

) ENGINE=MyISAM DEFAULT CHARSET=gb2312 |

+----------+----------------------------------------

----------------------------------------------------

----------------------------------------------------

1 row in set (0.00 sec)

 
7)テーブルの外部キー制約の削除
フォーマット:ALTER TABLE表名DROP FOREGN KEY外部キー別名;
例:
mysql> SHOW CREATE TABLE teacher;

+---------+------------------------------------------------

-----------------------------------------------------------

-----------------------------------------------------------

--------------------------------------------------+

| Table   | Create Table





                                                  |

+---------+------------------------------------------------

-----------------------------------------------------------

-----------------------------------------------------------

--------------------------------------------------+

| teacher | CREATE TABLE `teacher` (

  `id` int(11) NOT NULL,

  `stu_id` int(11) DEFAULT NULL,

  `name` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `STUID` (`stu_id`),

  CONSTRAINT `STUID` FOREIGN KEY (`stu_id`) REFERENCES `stu

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

+---------+------------------------------------------------

-----------------------------------------------------------

-----------------------------------------------------------

--------------------------------------------------+

1 row in set (0.08 sec)



mysql> ALTER TABLE teacher DROP FOREIGN KEY STUID;

Query OK, 0 rows affected (0.04 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> SHOW CREATE TABLE teacher;

+---------+------------------------------------------------

-----------------------------------------------------------

--------------------------------------------------------+

| Table   | Create Table



                                                        |

+---------+------------------------------------------------

-----------------------------------------------------------

--------------------------------------------------------+

| teacher | CREATE TABLE `teacher` (

  `id` int(11) NOT NULL,

  `stu_id` int(11) DEFAULT NULL,

  `name` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `STUID` (`stu_id`)

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

+---------+------------------------------------------------

-----------------------------------------------------------

--------------------------------------------------------+

1 row in set (0.00 sec)

 
テーブルを削除するには
フォーマット:DROP TABLEテーブル名;
関連付けられていない普通の表を削除します:直接上のSQL文でいいです
他のテーブルに関連付けられた親テーブルを削除するには、次の手順に従います.
方法1:サブテーブルを削除し、親テーブルを削除する
方法2:親テーブルの外部キー制約(上に説明)を削除し、テーブルを削除します.