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 INTO <テーブル名> (列名1,列名2,...) VALUES (値1,値2,...);
以下のようにSQLでデータを登録してみます
INSERT INTO `shop2` ('id', '商品名', 'カテゴリー', '売値', '仕入れ単価', '仕入れ日') VALUES (NULL, 'シャツ', '衣類', '1000', '800', '2000-01-01');
最初の()で列名順を指定して、VALUES()で登録したいデータを順に記述します
数字も文字列なのでシングルクォーテーションで囲む必要があります
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;
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つのまとまりとして囲って更新を行う管理方法
と、指示があった場合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で『上書き保存』という状態になります
処理更新を破棄し、終了するコマンド
「保存せずに終了」と同じ感覚です
ROLLBACKはデータを削除するわけではないので、データ更新処理に不安があるのであればROLLBACKしましょう( ´_ゝ`)