・COMMIT・ROLLBACK・SAVEPOINTシステムエンジニア(SE)になりたての方がSQLを習得するのはなかなか難しいですが、基礎と言われる構文だけは覚えておきましょう。大きく4つの種類に分類できます。4つとはデータ操作言語(DML)、データ定義言語(DDL)、データ制御言語(DCL)、トランザクション制御です。まとめデータ操作言語(DML)データを操作するための言語です。データに直接影響するSQLです。SELECT、UPDATE、INSERT、DELETE、MERGEがあります。最終的にcommitを実行しない限り、ディスクには書きこまれません。SELECTSELECTはデータを取得するSQLです。システムエンジニア(SE)になりたての新人はSELECTしか触れません。SELECT以外のDMLはテーブルのデータを変更するからです。SELECTは取得するだけなので、データを壊したり、消したりするリスクがありません。deptテーブルからすべてのデータを取得するSQLです。dept;*(アスタリスク)なので、全データを取得します。selectはサブクエリやWHERE句、結合などを使って、複雑なSQLが作成されます。性能悪化の原因にもなりえるDMLなので、SELECTと言えど、侮ってはいけません。UPDATEUPDATEはデータを更新するSQLです。更新とは、すでにテーブルに入っているデータの値を書き変えることを言います。dept表のid列値が10のデータがあります。そのage列値を20から30に更新するUPDATE文です。10;UPDATEはWHERE句で対象条件を絞って、SETに変更する列名と値を書きます。deptテーブルにid列値が10のデータが5個あれば、このSQLを実行すると、その5個のデータのage列はすべて30に更新されます。一括で変更するので慎重にSQLを組んでください。基本的に途中でストップできません。INSERTINSERTは新規でデータを挿入するSQLです。deptテーブルがid、age、salary、branchで構成されているとしましょう。このdeptテーブルにid:30、age:28、salary:250000,branch:tokyoというデータをINSERTします。VALUES(30,28,250000,’tokyo’);列名は書いたり、書かなかったりできます。サブクエリをそのままINSERTしたりもできます。DELETEデータを削除するSQLです。削除はDMLの中で一番気を使います。個人的にはあまり書きたくないです。誤ったDELETE文では必要なデータまで削除しかねませんので、僕は入念にレビューしてもらいます。dept表のid列値が10のデータを削除します。deptテーブルにid列値が10のデータが5個あれば、このSQLを実行すると、その5個のデータのage列はすべて削除されます。一括で削除されてしまうので、慎重にSQLを組んでください。10;MERGEMERGE分は可読性が低いので、あまり使いません。MERGEは「条件に合致したデータがあったときはUPDATE文を実行し、なかったときはINSERT文を実行」するDMLです。次のSQLを見てください。o.branch);ごちゃごちゃしていますね。このSQLは、dept表のデータをINSERTもしくは、UPDATEします。意味は、dept表のdeptnoとdept_old表のdeptnoを比較して、同じ値があれば、dept_old表のnameをdept表のnameにUPDATE(更新)し、なければdept_old表のid、dept_name、branchデータをINSERT(挿入)します。個人的にはMERGEを使わずに、IF文でSQLを分岐させた方が見やすい気がします。データ定義言語(DDL)データ定義言語はオブジェクト(表や索引)の作成、変更、削除を行います。データ操作言語(DML)が表の中にあるデータを直接操作するSQLだったのに対して、データ定義言語は表や索引が対象です。DDLは実行したらそれが即データベースに反映されます。DMLのようにcommitせずともデータベースに反映するので、commit忘れなどを心配する必要がない反面、実行後は取り消せないリスクがあります。CREATEオブジェクトを作成するDDLです。SYNONYMなどあらゆるオブジェクトを作成します。number(2));ALTERシステム開発の現場で意外に良く使うDDLがALTER文です。システムエンジニア(SE)になる前に独学していた時はALTERがあまり参考書に出てこないので軽視していましたが、実際はテーブルや制約の変更でよく使っています。key(dept_id);これでpk_dept制約を追加できました。dept_id列にnullや重複値が入っていると、プライマリーキー制約の性質上、作成できません。DROPオブジェクトを削除するDDLです。dept表を削除します。TABLEを実行すると対象オブジェクトはゴミ箱に入ります。TABLEを実行すると完全に削除され、再利用は不可能になります。dept;RENAMEオブジェクトの名前を変更するときに使うDDLです。基本、ALTERとセットで使います。dept_new;dept表名をdept_newに名前変更するRENAMEです。RENAMEを使うことはないかもしれないです。個人的には、RENAMEするならDROP、CREATEのセットで新しく作り直す方がリスク少ない気がします。TRUNCATETRUNCATEは表の切り捨てを実行するDDLです。DROPとTRUNCATEは似ていますが、違いをはっきりとさせておいた方が良いです。DROPはオブジェクトごと消し去りますが、TRUNCATEはオブジェクトの構造を残したまま、すべてのデータを削除します。TRUNCATEはDELETEにも近いSQLです。DELETEで全データ削除するよりもTRUNCATEで全データ削除した方がスピードは速いです。dept表をTRUNCATEしたSQLです。dept;COMMENTテーブルに対するコメントを入れるSQLです。「このテーブルはマスタテーブルです。」などのコメントを加えられます。「deptはマスタテーブルです。」のコメントをdept表に入れるSQLです。deptはマスタテーブルです。deptはマスタテーブルです。‘コメント’;が構文です。データ制御言語(DCL)データ制御言語は、アクセス制御を行うSQLです。ユーザーに対して、テーブルごとに実行できるSQLなどを付与・または削除を行います。DCLはGRANTとREVOKEの2つだけです。GRANT権限を付与するDCLです。テーブルを作成したユーザーはそのテーブルに対して、SELECTやらDELETEやらを実行できるのですが、テーブルを作成していないユーザーはデフォルトではそのテーブルが操作不可です。権限を与えれば、テーブル非作成ユーザーでもテーブルを操作できるようになります。auserユーザーが作成したdeptテーブルのselect権限をbuserユーザーに付与するSQLです。buser;ちなみに複数の権限を同時に付与することも可能です。上記SQLはSELECTだけでしたが、UPDATEも一緒に付与するSQLはこちらです。buser;REVOKE権限を削除するDCLです。buserユーザーに付与されていたauser所有のdept表に対するSELECT権限を取り消します。buser;以後、buserはauser.dept表にはselect実行できません。GRANTで再度、権限付与すればSELECTできるようになります。トランザクション制御DMLによるデータ変更をトランザクション単位で管理するSQLです。DMLを実行した時点ではまだデータ変更は未確定です。トランザクション制御のSQLを実行して、そのDMLの変更を制御します。COMMIT、ROLLBACK、SAVEPOINTがあります。COMMITトランザクション制御を確定するSQLです。UPDATE文を実行してもそれだけではDBのディスクに変更が書き込まれませんので、実質的にデータは変わらないままです。COMMITして、初めて確定します。COMMITの実行は、COMMITと打つだけです。COMMITCOMMIT;1COMMIT;ROLLBACK実行したトランザクションを確定しないためにはDB操作ツール(osqleditなど)の接続を切断するか、ROLLBACKの実行をするかです。ROLLBACKを実行すれば、トランザクションは取り消されます。ROLLBACKROLLBACK;1ROLLBACK;SAVEPOINTSAVEPOINTは、トランザクションを分けるためのSQLです。(と僕は思っています。)ROLLBACKとセットで使います。以下の順にロールバックをしてみましょう。VALUES('kondou');--ロールバック実行ROLLBACK;このROLLBACKだと処理1も処理2も変更取り消しが行われます。処理1と処理2を分けてトランザクション制御したい時は処理1と処理2の間にセーブポイントを作成します。A;このようにセーブポイントAを作成し、Aまでロールバックを実行すると処理2は取りされますが、処理1は取り消されません。セーブポイントを作成することでトランザクションを分割管理できます。まとめよく使うSQLは、システムエンジニア(SE)のポジションによって様々です。新人レベルはSELECTしか実行させてもらえないでしょうが、少しレベルが上がればUPDATEなどのDML、さらに上がればCREATEやGRANTなどのDDLやDCLも上司の実行許可が出ると思います。成長が不十分なシステムエンジニアは一生、DML以外は使わせてもらえないです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。【Oracleの初期化パラメータ】SPFILEの動的パラメータと静的パラメータを変更するセグメントの縮小とHMWの引き下げで表領域にスペースを作るRECOMMENDこちらの記事も人気です。