00メニュー > 01はじめてのMySQL > 02MySQLの基礎知識 > 03MySQLを使いこなす > 04MySQL+PHPの基礎 > 05MySQL+PHPの実践 > 06Appendix

07テーブルやレコードをコピー・削除する(備忘録)→ > 01p > 02p > 03p > 04p > 05p > END

07 テーブルやレコードをコピー・削除する

データベースの作成→テーブルの作成→データの挿入→データの確認、そしてテーブルを改造し、コピー、そして削除する方法です。
☆CHAPTER03⇒MySQLモニタ
☆CHAPTER04⇒データベースの作成
☆CHAPTER05⇒データ型とデータの入力
☆CHAPTER06⇒テーブルを改造する
★CHAPTER07⇒テーブルやレコードをコピー・削除する

★CHAPTER07⇒テーブルやレコードをコピー・削除する(p94)★

テーブルのカラム構造やデータをコピーしたり、データベース・テーブル・レコードを丸ごと削除したりする方法について説明。

(1)《テーブルのカラム構造やデータのコピー》

(2)《テーブルのカラム構造とレコードを丸ごとコピーする》

(2-1)テーブルのカラム構造+データのコピー

●書式⇒テーブルのカラム構造とレコードをコピーしてテーブルを作成

CREATE TABLE 新規テーブル名 SELECT * FROM 元となるテーブル名;
※「SELECT * FROM・・・」した結果を使って「CREATE TABLE」することになります。これで新しくテーブルが作成され、そのデータもコピーされます。社員情報テーブル「tb1」のバックアップを作っておきましょう。テーブル「tb1」のカラム構造とレコードをコピーして「tb1H」を作成します。

●実行される内容 p95

●操作手順

①次を実行する
CREATE TABLE tb1H SELECT * FROM tb1;
②次を実行する
コピーされたかどうか、確認してみます。
SELECT * FROM tb1H;

【実行結果】

mysql> CREATE TABLE tb1H SELECT * FROM tb1;
Query OK, 6 rows affected (0.18 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tb1H;
+------+------+------+
| bang | nama | tosi |
+------+------+------+
| A101 | 佐藤 | 40 |
| A101 | 佐藤 | 40 |
| A102 | 高橋 | 28 |
| A103 | 中川 | 20 |
| A104 | 渡辺 | 23 |
| A105 | 西沢 | 35 |
+------+------+------+
6 rows in set (0.01 sec)

mysql>

(3)《テーブルのカラム構造だけをコピー》

(3-1)テーブルのカラム構造のみコピー

●書式⇒テーブルのカラム構造でけコピーして新しくテーブルを作成する

CREATE TABLE 新規テーブル名 KIKE 元となるテーブル名;
※社員情報テーブル「tb1」と同じカラム構造を持つ、空のテーブル「tb1I」を作ってみましょう。
まず、テーブル「tb1」のカラム構造だけをコピーして、テーブル「tb1I」を新規に作ります。さらに、テーブル「tb1」と「tb1I」のカラム構造を表示してみましょう。

●実行される内容 p97

●操作手順

①次を実行する
CREATE TABLE tb1I LIKE tb1;
②次を実行する
DESC tb1;
DESC tb1I;

【実行結果】

mysql> DESC tb1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| bang | varchar(10) | YES | | NULL | |
| nama | varchar(10) | YES | | NULL | |
| tosi | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.09 sec)

mysql> DESC tb1I;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| bang | varchar(10) | YES | | NULL | |
| nama | varchar(10) | YES | | NULL | |
| tosi | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.04 sec)

mysql>
mysql> SELECT * FROM tb1I;
Empty set (0.00 sec)

mysql>

(4)《他のテーブルのレコードをコピーする》

(4-1)他のテーブルのデータをコピーする

●書式⇒他のテーブルのレコードをコピー

NSERT INTO テーブル名 SELECT * FROM 元となるテーブル名;
※先ほど、テーブル「tb1」と同じ構造を持つ空のテーブル「tb1I」作りました。このテーブル「tb1I」に「tb1」のすべてのレコードをコピーしてみます。先ほどテーブルのカラム構造だけコピーした「tb1I」に、「tb1」のレコードを挿入します。さらに挿入後、全レコードを表示してみましょう。

●実行される内容 p98

●操作手順

①次を実行する
INSERT INTO tb1I SELECT * FROM tb1;
②次を実行する
SELECT * FROM tb1I;

【実行結果】

mysql> INSERT INTO tb1I SELECT * FROM tb1;
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM tb1I;
+------+------+------+
| bang | nama | tosi |
+------+------+------+
| A101 | 佐藤 | 40 |
| A101 | 佐藤 | 40 |
| A102 | 高橋 | 28 |
| A103 | 中川 | 20 |
| A104 | 渡辺 | 23 |
| A105 | 西沢 | 35 |
+------+------+------+
6 rows in set (0.00 sec)

mysql>

(5)《特定のカラムを選択してコピーする》

(6)《テーブル・データベース・レコードの削除》

(7)《テーブルを削除する》

●書式⇒テーブルの削除

DROP TABLE テーブル名;
※テーブル「tb1A」を削除してみましょう。また、削除後、存在するすべてのテーブル名を表示してみましょう。

●実行される内容 p101

●操作手順

①次を実行する
DROP TABLE tb1A;
②次を実行する
SHOW TABLES;

【実行結果】

mysql> SELECT * FROM tb1A;
+------+------+------+
| bang | nama | tosi |
+------+------+------+
| A101 | 佐藤 | 40 |
| A101 | 佐藤 | 40 |
| A102 | 高橋 | 28 |
| A103 | 中川 | 20 |
| A104 | 渡辺 | 23 |
| A105 | 西沢 | 35 |
+------+------+------+
6 rows in set (0.55 sec)

mysql> DROP TABLE tb1A;
Query OK, 0 rows affected (0.12 sec)

mysql> SHOW TABLES;
+-----------------+
| Tables_in_db1 |
+-----------------+
| hizu_ziko |
| hizuke |
| itii |
| renzoku |
| syokiti_renzoku |
| tb1 |
| tb1b |
| tb1c |
| tb1g |
| tb1h |
| tb1i |
| unig |
+-----------------+
12 rows in set (0.03 sec)

mysql>

(7-1)もし指定のテーブルがある場合には削除する(p102/省略)

(8)《データベースの削除》

●書式⇒データベースの削除

DROP DATABASE データベース名;

(9)《レコードの丸ごと削除》

●書式⇒レコードの全削除

DELETE FROM テーブル名;
※「DELETE FROM」とすれば、テーブルにあるすべてのレコードが削除されます。また、もし丸ごとでなくレコードを選択して削除するときは、「WHERE」で条件を設定します。WHEREについては後で詳しく。 テーブル「tb1H」のすべてのレコードを削除しましょう。また削除後、レコードがないことを確認します。

●実行される内容 p103

●操作手順

①次を実行する
DELETE FROM tb1H;
②次を実行する
SELECT * FROM tb1H;

【実行結果】

mysql> SELECT * FROM tb1H;
+------+------+------+
| bang | nama | tosi |
+------+------+------+
| A101 | 佐藤 | 40 |
| A101 | 佐藤 | 40 |
| A102 | 高橋 | 28 |
| A103 | 中川 | 20 |
| A104 | 渡辺 | 23 |
| A105 | 西沢 | 35 |
+------+------+------+
6 rows in set (0.00 sec)

mysql> DELETE FROM tb1H;
Query OK, 6 rows affected (0.53 sec)

mysql> SELECT * FROM tb1H;
Empty set (0.00 sec)

mysql>

<まとめ>

●他のテーブルのカラム構造とデータをコピーしてテーブルを作成する方法
●他のテーブルのカラム構造をコピーしてテーブルを作成する方法
●他のテーブルのレコードをコピーする方法
●テーブル・データベース・レコードを単純に削除する方法

<チェック>

□「CREATE TABLE…SELECT…」でカラム構造とデータをコピーしてテーブルが作成できる
□「CREATE TABLE…LIKE…」でカラム構造だけをコピーしてテーブルが作成できる
□「INSERT INTO…SELECT…FROM…」を使ってテーブルにデータをコピーできる
□「DROP」を使って、データベース・テーブル・レコードが削除できる

<練習問題>

問題1
次のようなテーブル「nadake」があります。ここにテーブル「」のカラム「」のデータだけを挿入して下さい。

《解答》

問題1
次を実行します。
INSERT INTO nadake (a) SELECT nama FROM tb1;

【実行結果】

①テーブルの作成p43
CREATE TABLE nadake(a VARCHAR(10));
②テーブルにデータを入力p51
INSERT INTO nadake (a) VALUES ('松尾'),('市川'),('郷'),('伊藤'),('岡田');
③テーブルのデータ確認
SELECT * FROM nadake;
④「tb1」テーブルから名前「nama」だけ挿入する
INSERT INTO nadake (a) SELECT nama FROM tb1;
⑤確認
SELECT * FROM nadake;

mysql> CREATE TABLE nadake(a VARCHAR(10));
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO nadake (a) VALUES ('松尾'),('市川'),('郷'),('伊藤'),('岡田');

Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM nadake;
+------+
| a |
+------+
| 松尾 |
| 市川 |
| 郷 |
| 伊藤 |
| 岡田 |
+------+
5 rows in set (0.00 sec)

mysql> INSERT INTO nadake (a) SELECT nama FROM tb1;
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM nadake;
+------+
| a |
+------+
| 松尾 |
| 市川 |
| 郷 |
| 伊藤 |
| 岡田 |
| 佐藤 |
| 佐藤 |
| 高橋 |
| 中川 |
| 渡辺 |
| 西沢 |
+------+
11 rows in set (0.00 sec)

mysql>