INSERT(登録)

テーブルを作成するだけならCREATE TABLE文で作成します

この作成されたテーブルにデータを入れるためにINSERT(登録)文を使用します

まず、SQL文でテーブルを作成します

CREATE TABLE `shop`.`shop2` 
( `id` INT NOT NULL AUTO_INCREMENT ,
 `商品名` VARCHAR(4) NOT NULL , 
 `カテゴリー` VARCHAR(30) NOT NULL ,
 `売値` INT NOT NULL , 
 `仕入れ単価` INT NOT NULL ,
 `仕入れ日` INT NOT NULL ,
 PRIMARY KEY (`id`)) ENGINE = InnoDB;

※使用するRDBMSによって書き方が多少変わります

※DB環境はMAMPを使用しています

INSERT基本構文

INSERT INTO <テーブル名> (列名1,列名2,...) VALUES (値1,値2,...);

以下のようにSQLでデータを登録してみます

INSERT INTO `shop2`
('id', '商品名', 'カテゴリー', '売値', '仕入れ単価', '仕入れ日') 
VALUES (NULL, 'シャツ', '衣類', '1000', '800', '2000-01-01');

最初の()で列名順を指定して、VALUES()で登録したいデータを順に記述します

数字も文字列なのでシングルクォーテーションで囲む必要があります

列名と値の数が一致しないとエラーになります!
基本的にINSERT文は1回で1行分のデータを登録します

NULLの設定

INSERT INTO `shop2`
('id', '商品名', 'カテゴリー', '売値', '仕入れ単価', '仕入れ日') 
VALUES (NULL, 'シャツ', '衣類', '1000', NULL, '2000-01-01');

NULLを設定したい場合は、設定したい値の個所にそのまま『NULL』を書きます

NOT NULLを設定(idなど)した列にNULLを書くと当然エラーになります

デフォルト値

テーブルに行を追加する場合に...

INSERT INTO `shop2`
( '商品名', '売値', '仕入れ単価', ) 
VALUES ('シャツ', '1000', '800');

と、省略して書くと省略された『id』『カテゴリー』『仕入れ日』はNULLになってしまいます

これを避けるためにはデフォルト値(初期値)を設定したCREATE TABLE文の作成が必要になります

CREATE TABLE テーブル名 (

列名 型名 DEFAULT デフォルト値,)

例として

CREATE TABLE `shop`.`shop2` 
( `id` INT NOT NULL AUTO_INCREMENT ,
 `商品名` VARCHAR(4)  , 
 `カテゴリー` VARCHAR(30)  ,
 `売値` INT DEFAULT 0, 
 `仕入れ単価` INT DEFAULT 0 ,
 `仕入れ日` INT  DEFAULT 0,
 PRIMARY KEY (`id`)) ENGINE = InnoDB;

と、設定しておくとのちに行を追加することになって売値、仕入れ単価、仕入れ日を省略されてINSERT文が書かれた場合、NULLではなく0が結果として表示されます

DELETE(削除)

テーブル自体を削除する場合はDROP TABLE文を使用しますが、テーブルを残したまま行のデータを削除したい場合はDELETE文を使用します

テーブルを残したまま、全行を削除

DELETE FROM (テーブル名);

一部の行だけ削除

DELETE FROM (テーブル名)

WHERE (条件);

例として、『仕入れ単価が150円以上』の行を削除する場合

DELETE FROM `shop`
WHERE `仕入れ単価` >= 150;
800円(ぶどう)と180円(アルコール)が削除

WHERE句で指定するためDELETE句ではGROUP BY句やHAING、ORDER BY句は指定できません

UPDATE(更新)

データの処理を間違えて挿入した場合、DELETE文で削除してINSERT文で再挿入するのも一つの手段ですが、もっといい方法がUPDATE文データの更新です

UPDATE (テーブル名)

SET (列名) = (式);

全ての列の仕入れ日を変更したい場合

UPDATE `shop` 
SET `仕入れ日` = '2001-01-01';

NULL値が設定されていた場合もUPDATE文は上書きしてくれます

一部分の更新

部分的な更新はSET句の次にWHERE句で指定してあげます

『売値』の『飲み物』カテゴリー部のみ値を変更します

UPDATE `shop` 
SET `売値` = '110'
WHERE `カテゴリー` = '飲み物';

NULLに更新することもできます

複数行を同時に更新することも可能ですが、一気に何行もSQL文を書くとエラーが出た時、その箇所を探すのが手間なので、個人的に2,3行くらいで更新するのがいいかなと思います

トランザクション

DBのデータは重要でチーム、企業など規模が大きくなるほど管理を慎重にしないと、ちょっとした手順で削除したりしてしまって、取り返しのつかない事態になる可能性もあります

少しでも、そのような事態を防ぐためにトランザクションという機能を紹介します

トランザクション

1つ以上の更新を1つのまとまりとして囲って更新を行う管理方法

青い鳥くん!DBの販売価格を全部1200円にして、〇〇を1000円にしといて!

と、指示があった場合UPDATE文かDELETE文&INSERT文かで更新処理をしますね

分かりました!

「販売価格を1200円」「〇〇を1000円」と、いう処理の流れになります

これで、1セットの処理なのに「販売価格を1200円」だけ更新をしてしまって、「〇〇を1000円」を忘れていたら、のちにエラーが起こるし、第三者が絡んだDBなら金額のエラーならば信用問題にも関わります

トランザクション開始文

処理文①;

処理文②;...

トランザクション終了文(COMMIT 又は ROLLBACK)

トランザクション開始文と終了文で囲うことによって、1つの処理過程としてまとめます

開始文はDBNSによって書き方が異なります

  • SQL Server PostgreSQL 『BEGIN TRANSACTION』
  • MySQL 『START TRANSACTION』
  • Oracle DB2 無し

RANSACTIONは省略できます!(・∀・)

COMMIT ROLLBACK

COMMIT

トランザクション開始文→更新処理→COMMITで終了する命令文、コマンドです

COMMITで『上書き保存』という状態になります

ROLLBACK

処理更新を破棄し、終了するコマンド

「保存せずに終了」と同じ感覚です

ROLLBACKはデータを削除するわけではないので、データ更新処理に不安があるのであればROLLBACKしましょう( ´_ゝ`)

おすすめの記事