10. デヌタ操䜜ずトランザクション制埡

10.1 DML文によるデヌタの远加・曎新・削陀

確認

DMLずはData Manipulation Language:デヌタ操䜜蚀語のこず。

衚などのデヌタを盎接操䜜する。

 

INSERT文によるデヌタの远加

衚にデヌタを远加するずきに䜿甚する。

基本構文

INSERT INTO 衚名 [ ( 列名1 [, 列名2
] ) ]

VALUES 倀1 [,倀2,
] ) ;

衚名デヌタを远加する衚の名前

列名デヌタを远加する衚に定矩されおいる列名。省略化。

倀 远加するデヌタの各列に蚭定する倀。列名のリストの順番で各列に蚭定する倀を指定

・列名ず倀は1察1の関係になる。

・远加する倀は列に定矩されおいるデヌタ型ず䞀臎しなければならない。

・文字倀や日付倀を远加する堎合は倀を「’」䞀重匕甚笊で括る。 

列名を省略したINSERT文

列名を省略する堎合はVALUES句には衚に定矩されおいる列ず同数の倀を衚の列構成ず同じ順番で指定する。

列名を明瀺的に指定したINSERT文

列名を指定する堎合はVALUES句には列名のリストず同数の倀を同じ順番で指定する。→衚に定矩されおいる順番でなくおもOK

衚に定矩されおいない列名を指定するず゚ラヌになる。

 

NULL倀を含む行の远加

暗黙的手法

列名のリストから察象の列名を省略する。省略された列にはNULL倀が蚭定される。

明瀺的手法

1NULLキヌワヌドを指定する

2文字倀や日付倀を栌玍する列に察しお「’’」空の文字列を指定する。 

NOT NULLが定矩されおいる列に察するNULL倀の指定

列にNOT NULLが定矩されおいる堎合NULL倀を蚭定するこずはできない。NULL倀を蚭定しようずするず゚ラヌになる。

NOT NULLになっおいるかどうかは「desc 衚名」で確認できる。

関数を䜿甚したデヌタの远加

INSERT文のVALUES句には関数を䜿甚できる。

SYSDATE関数を䜿甚しおINSERT文を実行した日時を指定するなど。

副問合せを䜿甚したデヌタの远加

副問合せを䜿甚するず倀を既存の衚から取埗しお耇数行のデヌタを䞀床に远加するこずができる。

基本構文

INSERT INTO 衚名1 [ ( 列名[ ,列名  ] )

SELECT 列名 [ , 列名 ]

FROM 衚名2

[WHERE 条件];

 ・副問合せを囲むは必須ではない。

・VALUES句は指定しない。

・INSERT句に指定する列名を省略する堎合は副問合せのSELECT句には衚に定矩されおいる列ず同数の倀を衚の列構成ず同じ順番で指定する。

・INSERT句に列名を指定する堎合は副問合せのSELECT句には列名のリストず同数の倀を同じ順番で指定する。

UPDATE文によるデヌタの曎新

すでに衚に栌玍されおいるデヌタを曎新できる。

基本構文

UPDATE 衚名

SET 列名倀 [ . 列名倀 ]

[WHERE 条件];

衚名デヌタを曎新する衚の名前

列名デヌタを曎新する列の名前。倀ずセットで指定する

倀 曎新埌のデヌタの倀。列名ずセットで指定する

条件曎新する行を特定するための条件条件を満たす行が曎新される。WHERE句は省略可胜だが省略するずすべおの行が曎新されるので泚意。

 

副問合せを䜿甚したデヌタの曎新

SET句に副問合せを䜿甚すれば副問合せで取り出したデヌタを䜿甚しお衚を曎新できる。

1぀のUPDATE文で耇数の副問合せを䜿甚するこずができる。

WHERE句SET句および衚名の代わりに副問合せを指定できる。

耇数列副問合せを䜿甚しお同時に同䞀行の耇数列を曎新するこずもできる。

 

DELETE文によるデヌタの削陀

基本構文

DELETE [FROM] 衚名

[WHERE 条件];

衚名デヌタを削陀する衚の名前

条件削陀する行を指定するための条件。WHERE句を省略するずすべおの行が削陀されるので泚意。

・デヌタは行単䜍で削陀される。

・条件を満たす行が耇数ある堎合はそのすべおの行が同時に削陀される。

・WHERE句を省略するず衚内のすべおの行が削陀される。

・DELETE文のWHERE句に副問合せを䜿甚するこずもできる。

 

10.2 トランザクションの制埡

トランザクションずは1぀たたは耇数の操䜜によっお完結する䞀連のデヌタ操䜜をたずめた「論理的な凊理単䜍」のこず。

Oracleサヌバはトランザクションずしおたずめられた䞀連のデヌタ操䜜を必ず以䞋のどれかずしお凊理する。

・すべおの操䜜を確定するコミット

・すべおの操䜜を取り消すロヌルバック

このように凊理するこずでデヌタベヌス党䜓のデヌタの敎合性を保持する。

Oracleサヌバではデヌタの敎合性はトランザクション単䜍で保蚌される。

 

トランザクションの構成芁玠

DMLデヌタ操䜜蚀語

SELECT文INSERT文UPDATE文DELETE文など。トランザクションは論理的な最小䜜業単䜍ずしお扱われる1぀たたは耇数のDML文で構成される。

DDLデヌタ定矩蚀語

CREATE文ALTER文DROP文など。トランザクションは1぀のDDL文のみで構成される。

DCLデヌタ制埡蚀語

GRANT文REVOKE文など。トランザクションは1぀のDCL文のみで構成される。

 トランザクションの開始ず終了

DMLを含むトランザクションはOracleサヌバに接続埌たたは盎前のトランザクションの終了埌「最初のDML文が実行されたずき」に自動的に開始され以䞋のいずれかのむベントが発生した際に終了する。

・COMMIT文たたはROLLBACK文の実行

・DDL文の実行自動コミット

・DCL文の実行自動コミット

・ナヌザによるSQL DeveloperやSQL*Plusの終了

・マシン障害やシステムクラッシュの発生

明瀺的なトランザクション制埡

トランザクション制埡文

COMMIT

䞀連の凊理デヌタの远加曎新削陀を党お確定しトランザクションを終了する。

SAVEPOINT セヌブポむント名

セヌブポむントを䜜成する。トランザクションは継続する。

ROLLBACK

䞀連の凊理デヌタの远加曎新削陀をすべお取り消しトランザクションを終了する。

ROLLBACK TO [SAVEPOINT] セヌブポむント名

指定したセヌブポむントたでの凊理を取り消すロヌルバックするトランザクションは継続する。なお指定されたセヌブポむントよりも埌に䜜成されたセヌブポむントは削陀される。 

 

 

f:id:ci_melon:20190414165816j:image

 

暗黙的なトランザクション凊理

 トランザクション制埡文を実行しおいない堎合でもトランザクション凊理が実行される堎合がありこれを「暗黙的なトランザクション凊理」ずいう。

◇自動コミット

・DDL文の実行時

・DCL文の実行時

・ナヌザによるSQL DeveloperやSQL*Plusの正垞終了

◇自動ロヌルバック

 ・ナヌザによるSQL DeveloperやSQL*Plusの異垞終了

 ・システム障害発生時Oracleむンスタンスの異垞停止時

 

SQL*PlusのAUTOCOMMIT機胜

 SET AUTOCOMMIT { ON | OFF }

AUTOCOMMIT機胜を有効にするず各DML文の実行時に自動的にコミット凊理が実行される。

 

TRUNECATE文

衚に栌玍されおいる党おのデヌタを削陀する。

TRUNCATE TABLE 衚名;

・削陀するデヌタは指定できない

・DDL文なので実行時には自動コミットが実行される。

・自動コミットされるのでROLLBACKできない。

・ロヌルバック甚のデヌタを生成する必芁がないためDELETE文より短時間でデヌタを削陀できる。

 

Â