EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

第5回 MySQL事始 SQL文(2) データを変更するSQL文

  2011/07/26 00:00

今回はデータを変更する構文を解説します。データの追加、変更、削除の一般的な操作に加えて、MySQL独自の構文も紹介いたします。

INSERT

INSERT文は新規にデータを追加するSQL文です。MySQLには1つのINSERT文で複数の行をまとめて追加する独自の拡張があります。

INSERT文の基本構造
INSERT INTO テーブル名 [(列のリスト)] VALUES(値);

テーブルの全ての列に値を追加する場合には、テーブル名の後に列名の指定は不要です。

「Cityテーブルに都市NewCityを追加する」
mysql> INSERT INTO City(Name) VALUES('NewCity');
Query OK, 1 row affected (0.02 sec)
mysql> SELECT * FROM City ORDER BY ID DESC LIMIT 3;
+------+---------+-------------+----------+------------+
| ID   | Name    | CountryCode | District | Population |
+------+---------+-------------+----------+------------+
| 4080 | NewCity |             |          |          0 |
| 4079 | Rafah   | PSE         | Rafah    |      92020 |
| 4078 | Nablus  | PSE         | Nablus   |     100231 |
+------+---------+-------------+----------+------------+
3 rows in set (0.00 sec)

ここでは都市名のみを追加しています。Cityテーブルでは全ての列に値の入力が必須のNOT NULL制約が設定されているため、自動的に各列にデフォルトの値が設定されています。ID列にはauto_incrementが設定されているため、明示的に値を指定しない場合にはそれまでの最大値に1を加えた値が使われます。文字列型の列にはデフォルトで長さ0バイトの文字列、数値型にはデフォルトで0が使われます。

複数行まとめての追加

MySQLには1つのINSERT文で複数の行をまとめて追加する独自の拡張があります。構文は各行のデータをカンマで区切って表記します。

INSERT INTO テーブル名 [(列のリスト)] VALUES(値), (値), (値) ... ;
INSERT SELECT

あるテーブルの内容をまとめて別のテーブルに追加することができます。

INSERT INTO テーブル名 [(列のリスト)] SELECT ... ;

「アメリカの都市名と人口のみを別のテーブルに追加する」

mysql> CREATE TABLE USCity
    -> (ID INT(11), Name char(35))
    -> ENGINE=MEMORY;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO USCity
    -> SELECT ID, Name FROM City
    -> WHERE CountryCode ='USA';
Query OK, 274 rows affected (0.01 sec)
Records: 274  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM USCity LIMIT 5;
+------+--------------+
| ID   | Name         |
+------+--------------+
| 3793 | New York     |
| 3794 | Los Angeles  |
| 3795 | Chicago      |
| 3796 | Houston      |
| 3797 | Philadelphia |
+------+--------------+
5 rows in set (0.00 sec)

「過去○日分のデータを集計して別のテーブルに追加」 など、集計データの管理などにこの構文を活用することが考えられます。


著者プロフィール

  • 梶山隆輔(カジヤマリュウスケ)

    日本オラクル株式会社 MySQL Global Business Unit Asia Pacific & Japan担当 MySQL Principal Sales Consultant オラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なMySQL部門にて、台湾、オーストラリア、インドに在籍するチームメンバーを束ね、アジア太平洋地域の25以上の国や地域でのMySQL普及やビジネスの拡大をミッションとする。  

バックナンバー

連載:MySQL事始

もっと読む

All contents copyright © 2007-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5