SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

Data Tech 2024

2024年11月21日(木)オンライン開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

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

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2024年秋号(EnterpriseZine Press 2024 Autumn)特集「生成AI時代に考える“真のDX人材育成”──『スキル策定』『実践』2つの観点で紐解く」

MySQL事始

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

第5回


今回はデータを変更する構文を解説します。データの追加、変更、削除の一般的な操作に加えて、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)

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

次のページ
UPDATE文

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
MySQL事始連載記事一覧

もっと読む

この記事の著者

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

日本オラクル MySQL Global Business Unit Asia Pacific & Japan担当 MySQLソリューション・エンジニアリング・ディレクターオラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なM...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3338 2012/02/10 17:36

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング