今回はデータを変更する構文を解説します。データの追加、変更、削除の一般的な操作に加えて、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ソリューション・エンジニアリング・ディレクターオラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なM...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
