web学習日記

プログラミングやweb関係を学んだことを呟くブログ

CRUDとは

f:id:nana205:20190711014353p:plain

CRUDとは

CRUDは Create(作成) Read(参照) Update(更新) Delete(削除)の頭文字をとって命名されたデータベース操作の種類のことで
データベース操作の基本です。

テーブルを作成してみる

create table users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
age INTEGER,
created_at DATETIME,
updated_at DATETIME);`

create tableの基本文法は

create table [ユーザ名] ( [カラム名1] [型1] [オプション1],[カラム名2] [型2] [オプション2] ...)

Create /INSERTでレコードを作成する

テーブルが作成できたので実際にレコードを作成します。作成するにはInsert文で作成します。

INSERT INTO users (name, email, age, created_at, updated_at)
VALUES('John', 'john@example.com', 20, NOW(), NOW())

このような形式で挿入するテーブル、カラムとその値を指定してレコードを挿入します。 複数カラムを入れたい場合

INSERT INTO users (name, email, age, created_at, updated_at)
VALUES('Mary', 'mary@example.com', 20, NOW(), NOW()),
('Sam', 'sam@example.com', 22, NOW(), NOW()),
('Brian', 'brian@example.com', 30, NOW(), NOW()),

また、次のようにnameを指定しない形でのINSERT文もSQLの構文としては正しいですが、
前の段階でnameカラム自体にNOT NULL(空でない)制約をかけているのでnameを省略するとエラーになります。

> INSERT INTO users ( email, age, created_at, updated_at)
-> VALUES('alice@example.com', 20, NOW(), NOW());
ERROR 1364 (HY000): Field 'name' doesn't have a default value

ここでは、NOTNULL制約をかけているのでデフォルトの値がないと言われています。

Read/SELECTでレコードを参照する

前で作成したので確認してみる

SELECT*FROM users;

ここで条件を絞り込むにはwhere句を使用します。

SELECT*FROM users where name = 'masato';

名前にmが含まれている場合

SELECT*FROM users where name like '%m%';

名前にmが含まれるかつ20際以上の人

SELECT*FROM users where name like '%m%' and age>=20;

名前に"m"が含まれるか"s"が含まれる人

SELECT*FROM users wehere name like '%m%' or name like '%s%';

など様々な形で条件式を書くことができます。AND条件OR条件を設定することができます。

Update/UPDATEでレコードを更新

次は更新処理です。masatoの名前をxxxという形式で更新しています。

UPDATE users SET name ='xxxx' where name ='masato';

更新日も設定すると

UPDATE users SET name = 'XXXX', updated_at = NOW() where name = 'masato';

このように複数のカラムを更新することができます。 UPDATEはSQLで迂闊にWHERE句を忘れるとテーブル全て更新されてしまいます。

Delete/DELETEでのレコード削除

最後のDELETEはいたってシンプルです

DELETE FROM users;

これだとテーブルの全レコードを削除してしまうのでUPDATEと同様に条件を絞って削除します。

DELETE *FROM users where  age>=20;

まとめ

CRUD操作のおさらいをしました。フレームワークありきだと直接SQLを操作しないため書く機会が減ってしまいますが、
このように整理してみると基本が振り返れていいですね。