MySQL挿入更新削除データ

5413 ワード

データ挿入
完全な行を挿入
INSERT INTO customers
VALUES(NULL,
       'Pep E. LaPew',
       '100 Main Street',
       'Los Angeles',
       'CA',
       '90046',
       'USA',
       'NULL',
       'NULL');
  • この例では、customersテーブルに新しい顧客を挿入します.各テーブル列に格納されたデータはVALuES句で与えられ、各列に値を指定する必要があります.カラムに値がない場合(前述のcust_contactおよびcust_emailカラムなど)、NULL値を使用する必要があります(テーブルがカラムにNULL値を指定できると仮定します).各カラムは、テーブル定義に表示される順序で入力する必要があります.第1列cust_idもNULLです.これは、新しいローを挿入するたびに、そのカラムがMySQLによって自動的に増分されるためです.値を指定したくない(これはMySQLの仕事です)し、この列を省略することはできません(前述のように各列を指定する必要があります)、NULL値を指定します(MySQLでは無視され、MySQLはここで次の使用可能なcust_id値を挿入します).
  • この文法は簡単ですが、安全ではありません.できるだけ避けなければなりません.INSERT文を記述するより安全(ただし、より煩わしい)な方法は、
  • です.
    INSERT INTO customers(cust_name, 
                          cust_address, 
                          cust_city, 
                          cust_state, 
                          cust_zip, 
                          cust_country, 
                          cust_contact, 
                          cust_email)
    VALUES('Pep E. LaPew',
           '100 Main Street',
           'Los Angeles',
           'CA',
           '90046',
           'USA',
           'NULL',
           'NULL');
    
  • この例では、前のINSERT文と全く同じ作業が完了したが、テーブル名の後の括弧に列名が明確に与えられている.行を挿入すると、MySQLはVALESリストの対応する値でリストの対応する項目に入力します.VALuESの最初の値は、最初に指定したカラム名に対応します.2番目の値は、2番目のカラム名などに対応します.
  • カラム名が指定されているため、VALESは指定されたカラム名を指定された順序で一致させる必要があります.必ずしも各カラムが実際のテーブルに表示される順序ではありません.このINSERT文は、テーブルの構造が変更されても正しく機能するという利点があります.cust_を見つけますidのNULL値は不要、cust_id列はリストに表示されないので、値は必要ありません.
  • どのINSERT構文を使用しても、VALESの正しい数を指定する必要があります.カラム名を指定しない場合は、各テーブル・カラムに値を指定する必要があります.カラム名を指定する場合は、リストされたカラムごとに値を指定する必要があります.そうしないと、エラーメッセージが発生し、対応するローの挿入が成功しません.
  • テーブルの定義が許可されている場合、INSERT操作でいくつかのカラムを省略できます.省略された列は、次のいずれかの条件を満たす必要があります.
  • カラムは、NULL値(値なしまたはNULL値)を許可するように定義されます.
  • は、テーブル定義にデフォルト値を与えます.これは、値が指定されていない場合、デフォルト値が使用されることを示します.

  • テーブルにNULL値が許可されず、デフォルト値がないカラムに値が与えられない場合、MySQLはエラーメッセージを生成し、対応するローの挿入に失敗します.

  • 複数行の挿入
    INSERT INTO customers(cust_name, 
                          cust_address, 
                          cust_city, 
                          cust_state, 
                          cust_zip, 
                          cust_country)
    VALUES('Pep E. LaPew',
           '100 Main Street',
           'Los Angeles',
           'CA',
           '90046',
           'USA'),
           ('M. Martian',
           '42 Galaxy Way',
           'New York',
           'NY',
           '11213',
           'USA');
    

    取得したデータの挿入
    INSERT INTO customers(cust_id,
                          cust_email,
                          cust_name,
                          cust_address,
                          cust_city,
                          cust_state,
                          cust_zip,
                          cust_country)
                          SELECT cust_id,
                                 cust_country,
                                 cust_email,
                                 cust_name,
                                 cust_address,
                                 cust_city,
                                 cust_state,
                                 cust_zip,
                                 cust_country
                          FROM custnew;
    
  • この例ではINSERT SELECTを使用してcustnewからすべてのデータをcustomersにインポートします.SELECT文は、custnewから挿入する値を取得し、リストするのではありません.SELECTにリストされている各列はcustomersテーブル名の後に続くリストの各列に対応しています.この文が挿入するローの数はcustnewテーブルのローの数に依存します.このテーブルが空の場合、ローは挿入されません(操作が合法であるため、エラーも発生しません).

  • データの更新
    mysql> UPDATE customers 
    	   SET cust_email='[email protected]'
           WHERE cust_id=10005;
    Query OK, 1 row affected (0.02 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
  • UPDATE文は、常に更新するテーブルの名前で開始されます.この例では、更新するテーブルの名前はcustomersです.SETコマンドは、更新されたカラムに新しい値を割り当てるために使用されます.ここに示すように、SET句はcust_を設定します.Email列は指定された値です.
  • UPDATE文はWHERE句で終わり、MySQLがどの行を更新するかを示します.WHERE句がない場合、MySQLはこのEメールアドレスでcustomersテーブルのすべてのローを更新します.
  • IGNOREキーワードUPDATE文で複数行が更新され、これらの行の1行または複数行が更新されたときにエラーが発生した場合、UPDATE操作全体がキャンセルされます(エラーが発生する前に更新されたすべての行が元の値に復元されます).エラーが発生しても更新を継続するために、IGNOREキーワードを使用することができます.
    UPDATE IGNORE customers… 
    

    データの削除
    mysql> DELETE FROM customers 
           WHERE cust_id=10006;
    Query OK, 1 row affected (0.01 sec)
    
  • DELETE FROMは、削除されたデータのテーブル名の指定を要求する.
  • WHERE句削除する行をフィルタします.
  • DELETEにはカラム名やワイルドカードは必要ありません.DELETEは列を削除するのではなく、行全体を削除します.指定した列を削除するには、UPDATE文を使用します.
  • テーブルの内容は、テーブルDELETE文ではなくテーブルからローを削除し、テーブル内のすべてのローを削除します.ただし、DELETEはテーブル自体を削除しません.
  • テーブルからすべてのローを削除したい場合は、DELETEを使用しないでください.TRUNCATE TABLE文を使用すると、同じ作業を完了できますが、より高速です(TRUNCATEは実際には元のテーブルを削除し、テーブルのデータを行ごとに削除するのではなく、テーブルを再作成します).

  • 更新と削除のガイドライン
      WHERE句が省略されている場合、UPDATEまたはDELETEはテーブル内のすべての行に適用されます.すなわち、WHERE句を持たずにUPDATEを実行すると、テーブルの各ローが新しい値で更新されます.同様に、WHERE句を持たずにDELETE文を実行すると、テーブルのすべてのデータが削除されます.
  • 各行を確実に更新および削除しようとしない限り、WHERE句を持たないUPDATE文またはDELETE文は絶対に使用しないでください.
  • 各テーブルにプライマリ・キーがあることを保証し、可能な限りWHERE句のように使用します(各プライマリ・キー、複数の値または値の範囲を指定できます).
  • UPDATE文またはDELETE文に対してWHERE句を使用する前に、まずSELECTでテストを行い、作成したWHERE句が正しくないように正確な記録をフィルタリングすることを保証しなければならない.
  • は、参照整合性を強制的に実装するデータベースを使用します.これにより、MySQLは他のテーブルに関連付けられたデータを持つローの削除を許可しません.