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