MySQL入門②
作業用ユーザーの作成
今までMySQLにログインするときrootユーザーを使ってきた
rootユーザーは何でも出来てしまうのでミスをした時の影響が大きい!!
消してはいけないデータベースを消してしまったり、、
そのため影響範囲を最小限にするために
データベースごとに作業用ユーザーを設定して利用するのが一般的!
作業用ユーザーを作るには、まずrootユーザーでログイン
sudo mysql -u root
作業用ユーザーを作るには、create
ユーザーコマンドを使う
ここでは、dbuser01というユーザー名で
localhostからアクセスするユーザー向けの設定をする
localhostとは、、利用者が現在操作しているコンピューターのこと
具体的には、今使っているCloud9のサーバーからアクセスを許可する設定
mysql> create user dbuser01@localhost identified by 'PW';
''の中にパスワードを設定できる!
Query OKと出て、エラーが発生しなければ成功
次に、dbuser01に対してdatabase db01の使用権限を設定
mysql> grant all on db01.*to dbuser01@localhost;
dbuser01に対してdatabaseのdb01の
全てのテーブルに関する全ての権限を付与する(localhostからのアクセスに対して)という意味!
Query OKと出て、エラーが発生しなければ成功
これで権限の設定ができたので確認していく
👇
exitでrootユーザーのログインを終了
次に作業用ユーザーでログインする
mysql -u dbuser01 -p
-pというオプションはパスワードを入力するという意味
各自設定したdbuser01のPWを入力
セキュリティr対策のため入力しても画面には何も表示されない
👇
ログインできた
念の為dbuser01になっているか確認
select user();
+--------------------+
| user() |
+--------------------+
| dbuser01@localhost |
+--------------------+
このように表示されている
データベースを表示
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db01 |
+--------------------+
db01は表示されているが、db02は表示されていないことに着目
👇
exit
練習としてもう1つユーザーを作る
同じようにrootユーザーでログイン
sudo mysql -u root
dbuser02というユーザーを作る
mysql> create user dbuser02@localhost identified by 'PW';
Query OKと出て、エラーが発生しなければ成功
dbuser02に対して、database db02の使用権限を設定
mysql> grant all on db02.* to dbuser02@localhost;
db02が追加された
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db01 |
| db02 |
| mysql |
| performance_schema |
| sys |
+--------------------+
👇
exit
mysql -u dbuser02 -p
各自設定したPWを入力
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db02 |
+--------------------+
db02が表示されている
db01は表示されていない点に着目!
👇
exit
rootユーザーでログイン
sudo mysql -u root
管理者ユーザーrootでログインした時は、db01もdb02も見えている
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db01 |
| db02 |
| mysql |
| performance_schema |
| sys |
+--------------------+
作成したdatabaseの削除
mysql> drop database db01;
Query OK, 0 rows affected (0.00 sec)
mysql> drop database db02;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
userを削除するには、
mysql> drop user dbuser01@localhost;
mysql> drop user dbuser02@localhost;
👇
exit
SQLファイルからSQLを実行
これまで、ターミナルでMySQLサーバーにログインして
そこでSQLを書いて実行してきたが、
外部ファイルにSQLを書いて実行することもできる
データベース、テーブルをまっさらな状態にして学習したいときに使用するSQL
drop database if exists mydb;
create database mydb;
grant all on mydb.* to mydbuser@localhost identified by 'PW';
database mydbを削除
if exists mydbというのは、もしdatabase mydbが存在しない場合に削除を実行しても
エラーにならないようにする記述
mydbという名前のdatabaseを作成
database mydbをmydbユーザーが使えるようにしている
ターミナルでSQLを実行
sudo mysql -u root < initialize.sql(ファイル名)
エラーが表示されなければOK
これでファイルに書かれたSQLがrootユーザーで実行された
よく使うSQLをファイルにしておくと
毎回記述しなくて済むので便利!
作成したユーザーでログインできるかと、
データベースができているか確認
mysql -u mydbuser -p
各自設定したPWを入力
👇
mydbユーザーでログインできた!
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
+--------------------+
database mydbができていることが確認できた
👇
exit
SQLのコメントを使おう
コメント
SQLを無効にすることができる方法
① -- コメント
例) -- select*from users;
⌘+/キー
② /コメント/
例1)/selectfrom users;*/
例2)
/selectfrom users;
selectfrom products;/
複数行も可能
テーブルの操作をしよう
テーブルの操作
- テーブルの作成
- テーブルの一覧表示
- テーブルの構造の確認
- テーブルの削除
データベースをまっさらにした状態で始める!
sudo mysql -u root < initialize.sql
これでSQLが実行され初期化が行われた
次にMySQLの作業用ユーザーmydbでログイン
mysql -u mydbuser -p
PWは各自設定したものを入力
👇
mydbユーザーでログインできた!
データベースはmydbを使う
mysql> use mydb
Database changed
テーブルの作成
usersテーブル
ユーザー情報を管理するテーブルを作る
カラムはid,name,ageを作成する
mysql> create table users (id int unsigned, name varchar(32), age int);
create table users = usersという名前のテーブルを作るという意味
()で囲って,区切りで各カラムであるid,name,ageを定義していく
unsigned,varchar,intのところはデータ型を使用している
(後のレクチャーで出てくる)
正しく作成されれば、Query OKと表示される
テーブルの一覧を表示してみる
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| users |
+----------------+
usersテーブルが表示されている
テーブルの構図を確認するには
desc users;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
desc = descriptionの略 日本語でいうと説明の意味
id,name,ageのフィールド(カラム)が存在していることが確認できた
テーブルの削除
mysql> drop table users;
mysql> show tables;
Empty set (0.00 sec)
usersテーブルがなくなった
テーブルの削除は基本的には取り消せないので
削除操作をする場合は注意!!
👇
exit
データ型について知ろう
データ型とは
- データベースでは、テーブルを作成するときに、それぞれのカラムに指定した形式のデータしか、入力できないように設定する
- この時指定するデータの形式をデータ型という
主なデータ型の種類
- 数値型
- 文字列型
- 日付・時刻型
数値型
- init (イント、インテジャー)
>整数-2147483648~2147483647 - tinyint (タイニーイント)
>とても小さな整数 -128~127 - float (フロート)
>小さい(単精度)浮動小数点数 -3.402823466E+38から -1.175494351E-38、0、および 1.175494351E-38 から 3.402823466+38 - double (ダブル)
>普通サイズ(倍精度)の浮動小数点数 -1.7976931348623157E+308から -2.2250738585072014E-308、0、および 2.2250738585072014E-308から 1.7976931348623157E+308
浮動小数点数とは、コンピュータにおける数値を表現する方法の一つで、主に小数点を含む数値を表現するときに利用されています。
補足①
-
int unsigned
> 数値は、符号なしとすることができます。言い換えると、正の整数だけ扱うとすることができます。正の整数だけ扱うことで、扱える値の範囲が増えます。 -
tinyint(1)
> 真偽値 true/falseを扱うことができます。
> 内部的には true は数字の1、falseは数字の0で管理されています。
※関連して...MySQLでは0とnullがfalseで、空文字を含むそれ以外の値は全てtrueとなる。
補足②
実務上は、
- 整数型:int
- 整数の中でも、真偽値を扱いたいときや127以下の数字を扱う:tinyint
- 小数を扱う:double
文字列型
-
char (キャラ)
> 固定長の文字列255文字まで。文字列を格納するときに指定した長さになるようにスペースが埋め込まれる。
例)商品コードで5桁固定。char(5) -
varchar (バーキャラ)
> 可変長の文字列255文字まで。
例)email。varchar(255) -
text (テキスト)
> 長い文字列65535文字まで
実務上は、
> 255文字まではvarchar
> それ以上はTEXT
と覚えておけば大抵OK
日付・時刻型
-
date (デイト)
> 日付 '1000-01-01'から'9999-12-31' -
datatime (デイトタイム)
> 日付と時刻'1000-01-01 00:00:0.000000'から'9999-12-31 23:59:59.999999' -
time (タイム)
> 時刻'838:59:59'から'838:59:59'
実務上はデイト型、デイトタイム型の利用頻度が高い
復習)テーブル作成
idは整数型で正の値しか使わないので
unsigned符号なしintとている
name(32)は最大32文字までが入る可変長の文字列
ageはint型、整数型としている
age intとしているが、年齢の数値を直接データベースに入力すると
毎年データを更新する必要が出てくる
実務上、年齢はdate型を使い年月日を格納することが多い
あくまでSQLを学習していく上でのわかりやすさを重視してint型を使っている
データの挿入をしよう
データの挿入
- データを挿入するにはinsertを使用
例) id:1,名前:'sato',年齢:20歳のデータを挿入したい場合、
insert into users(id, name, age)values(1, 'sato', 20);
このように記載
構文 insert
- 構文
insert into テーブル名(カラム1,カラム2,....)values(値1,値2,....);
補足
カラムリストとvalues句のリストは、列数が一致している必要がある
まずデータベースをまっさらにした状態で始める
sudo mysql -u root < initialize.sql
作業用ユーザーmydbユーザーでログイン
mysql -u mydbuser -p
各自設定したPWを入力
👇
mydbを選択
mysql> use mydb
Database changed
id,name,ageのカラムがあるテーブルを作る
mysql> create table users (id int unsigned, name varchar(32), age int);
Query OK, 0 rows affected (0.01 sec)
テーブルの一覧を確認
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| users |
+----------------+
1 row in set (0.00 sec)
usersテーブルが作成されている
次にカラム名を指定してデータを挿入する
テーブルの構図を確認するには
mysql> desc users;
次にカラム名を指定してデータを挿入する方法
mysql> insert into users (id, name, age) values (1, 'sato', 20);
mysql> insert into users (id, name, age) values (2, 'suzuki', 21);
mysql> insert into users (id, name, age) values (3, 'tanaka', null);
年齢がわからないのでデータを登録できない場合などは
nullというキーワードを使う
nullはデータが存在しないことを表す値
insert intoの後にテーブル名、()を用意して、フィールドをカンマ区切りで指定
valuesの後に()を用意して、id,name,ageの順でデータをカンマ区切りで指定
(文字列は''で囲う!)
Query OKと表示されエラーなどが出なければOK
👇
テーブルに入っている全てのデータを確認するには
mysql> select * from users;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | sato | 20 |
| 2 | suzuki | 21 |
| 3 | tanaka | NULL |
+------+--------+------+
id1からid3までデータが挿入された
テーブルに一度に複数のデータを挿入する方法
mysql> insert into users (id, name, age) values
-> (4, 'tanbaka', 23),
-> (5, 'ito', 24),
-> (6, 'watanabe', 25);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
valuesの後に
改行してカンマ区切りでそれぞれのデータをこのように並べていけば
一度にデータを挿入できる!!
mysql> select * from users;
+------+----------+------+
| id | name | age |
+------+----------+------+
| 1 | sato | 20 |
| 2 | suzuki | 21 |
| 3 | tanaka | NULL |
| 4 | tanbaka | 23 |
| 5 | ito | 24 |
| 6 | watanabe | 25 |
+------+----------+------+
id4からid6までデータが挿入された
👇
exit
データの挿入をしよう②
テーブル作成時のidカラムに関する指定
手動でidを決めていると、同じ値が2つあるといった状況になりかねない
そこで、カラムに対してオプションを指定する
-
auto_increment
値を指定しない場合、MySQLが自動的に連番を振る。(1,2,3....) -
not null
nullを許可しない -
PRIMARY KEY(主キー)
nullではない、重複しない値になることが保証される。
テーブルにつき1カラムだけ指定できる。
まずデータベースをまっさらにした状態で始める
sudo mysql -u root < initialize.sql
作業用ユーザーmydbユーザーでログイン
mysql -u mydbuser -p
各自設定したPWを入力
👇
mydbを選択
mysql> use mydb
Database changed
テーブルを作成
mysql> create table users (id int unsigned auto_increment not null primary key, name varchar(32), age int not null);
Query OK, 0 rows affected (0.02 sec)
not nullはid以外のカラムにも書くことができるため
ageにもつけてみる(何かしらの数値を入れないとエラーになる)
確認を行う
mysql> desc users;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| age | int(11) | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
not sull制約がidとageについた
Null = NO nullは許可しないという意味
id = auto_incrementがついた
idのデータ型intはunsigned符号なしとなっている
データを挿入
mysql> insert into users (name, age) values('sato', 20);
Query OK, 1 row affected (0.00 sec)
mysql> insert into users (name, age) values('suzuki', 21);
Query OK, 1 row affected (0.01 sec)
idの指定はauto_incrementを指定してMySQLに任す為、idは指定しない
テーブルのデータを確認
mysql> select * from users;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | sato | 20 |
| 2 | suzuki | 21 |
+----+--------+-----+
2件のデータが登録された
idはauto_incrementによって自動で振り分けられた
ageにnullを入れると、、、
mysql> insert into users (name, age) values('takahashi', null);
ERROR 1048 (23000): Column 'age' cannot be null
ageにnot null制約がついているため
値をnullにするとエラーとなる
カラムはnullにできませんというエラーメッセージが表示される
このようにageを指定しないでinsertをしようとしてもエラーとなる
mysql> insert into users (name) values('takahashi');
ERROR 1364 (HY000): Field 'age' doesn't have a default value
フィールドageはデフォルトバリューを持っていませんというメッセージが表示される
次に、insertの時にカラムに値が指定されていなかった場合に
デフォルトの値を指定することができるので使ってみる!
テーブルを削除
mysql> drop table users;
Query OK, 0 rows affected (0.00 sec)
ageのデフォルト値を例として1としたい場合
次のように定義する
mysql> create table users (id int unsigned auto_increment not null primary key,
-> name varchar(32),
-> age int not null default 1);
Query OK, 0 rows affected (0.01 sec)
(見やすいように改行している)
mysql> desc users;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| age | int(11) | NO | | 1 | |
+-------+------------------+------+-----+---------+----------------+
ageのデフォルト値が1になっている
ageを指定せずにinsertしている
mysql> insert into users (name) values ('sato');
挿入したデータを確認!
mysql> select * from users;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | sato | 1 |
+----+------+-----+
ageにデフォルトの値1が入っている
もちろん、ageの値を指定することもできる!
mysql> insert into users (name, age) values ('suzuki', 21);
Query OK, 1 row affected (0.00 sec)
挿入したデータを確認!
mysql> select * from users;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | sato | 1 |
| 2 | suzuki | 21 |
+----+--------+-----+
ageの値を指定することもできた!
👇
exit
データベースから値を取得しよう
構文select
構文
select カラム1,カラム2,.....from テーブル名;
select,取得したいカラムをカンマ区切りで指定、from テーブル名とする
補足
全てのカラムを取得したい場合は、
select*from テーブル名;
例)ユーザーテーブルのデータの名前を取得
select name from users;
usersテーブルのname列を全て取得したい場合はこのように書く
selectはSQLの中で一番使われる構文
しっかり身につける!!
セットアップ用のSQL
drop database if exists mydb;
create database mydb;
grant all on mydb.* to mydbuser@localhost identified by 'PW';
use mydb;
create table users (
id int unsigned auto_increment not null primary key,
name varchar(32),
age int);
insert into users(name, age) values('sato', 18);
insert into users(name, age) values('suzuki', 22);
insert into users(name, age) values('takahashi', 29);
insert into users(name, age) values('tanaka', 30);
insert into users(name, age) values('ito', 19);
insert into users(name, age) values('watanabe', 20);
insert into users(name, age) values('yamamoto', null);
内容としては、データベースを削除
mydbという名前のデータベースを作
mydbユーザーを作成してmydbを使う権限を付与
データベースmydbを選択
usersテーブルを作成
テストデータを挿入
(作業用ユーザーの PWは各自で設定)
sudo mysql -u root < initialize_lecture_select.sql
SQLを実行
作業用ユーザーmydbuserでログイン
mysql -u mydbuser -p
各自設定したPWを入力
mysql> use mydb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
usersテーブルの全てのレコードとカラムを抽出して表示
mysql> select * from users;
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 1 | sato | 18 |
| 2 | suzuki | 22 |
| 3 | takahashi | 29 |
| 4 | tanaka | 30 |
| 5 | ito | 19 |
| 6 | watanabe | 20 |
| 7 | yamamoto | NULL |
+----+-----------+------+
selectのあとには取得するカラムを指定する
*は全てのカラムを取得するという意味
from usersでusersテーブルからデータを取得するという意味
usersテーブルの全てのレコードとカラムを抽出して表示できた!
特定のカラムだけ取得したい場合
例えば
nameカラムだけ取得したい場合は、、
mysql> select name from users;
+-----------+
| name |
+-----------+
| sato |
| suzuki |
| takahashi |
| tanaka |
| ito |
| watanabe |
| yamamoto |
+-----------+
nameカラムだけ取得できた!!
複数カラムを指定したい場合は、カンマ区切りにする
例えば
nameとageカラムを取得したい場合
mysql> select name, age from users;
+-----------+------+
| name | age |
+-----------+------+
| sato | 18 |
| suzuki | 22 |
| takahashi | 29 |
| tanaka | 30 |
| ito | 19 |
| watanabe | 20 |
| yamamoto | NULL |
+-----------+------+
nameとageカラムだけ取得できた!!
*で全てのカラムを取得するよりも
このように必要なカラムのみ列挙した方が高速で値を取得できる
(0.00 sec)
これはクエリの実行にかかった時間
このくらいの規模だと計測できないようなレベルで高速
入門レベルだと*にしても問題にならない場合が多い
速度が問題になるのは何十万件、何百万件という
大量のデータを扱うとき!
条件を指定してデータベースから値を取得
全てのカラムについて全件を取得
mysql> select * from users;
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 1 | sato | 18 |
| 2 | suzuki | 22 |
| 3 | takahashi | 29 |
| 4 | tanaka | 30 |
| 5 | ito | 19 |
| 6 | watanabe | 20 |
| 7 | yamamoto | NULL |
+----+-----------+------+
年齢ageが20歳以上のデータを取得するには、、、
mysql> select * from users where age >= 20;
whereの後に続いて取得したい条件を書く
age >= 20
これで20歳以上という条件になる
20歳以上のレコードだけ抽出できた!
>=の部分を
比較演算子という
代表的なよく使う比較演算子
実際に使いながら学習していく!!
idが1のレコードを取得
mysql> select * from users where id = 1;
= は1個だけの点に注意!
id が1のレコードが取得できた!
nameがsatoのレコードを取得
mysql> select * from users where name = 'sato';
ageが20より大きいレコードを取得
mysql> select * from users where age > 20;
ageが20より小さいレコードを取得
mysql> select * from users where age < 20;
ageが20ではないレコードを取得
mysql> select * from users where age <> 20;
次のようにも書ける
mysql> select * from users where age != 20;
idが1か2か3のレコードを取得
mysql> select * from users where id in (1, 2, 3);
idが1か2か3ではないレコードを取得
mysql> select * from users where id not in (1, 2, 3);
ageがnullではないレコードを取得
mysql> select * from users where age is not null;
ageがnullのレコードを取得
mysql> select * from users where age is null;
ageが20から29のレコードを取得
mysql> select * from users where age between 20 and 29;
andを使っても書ける!
mysql> select * from users where age >=20 and age <= 29;
ageが20または29のレコードを取得
mysql> select * from users where age = 20 or age = 29;
パターンマッチ(あいまい検索)を使おう
構文like
select カラム1,カラム2,....from テーブル名 where カラム名 like ワイルドカード文字;
補足
> ワイルドカード文字で文字列のパターンを指定
①'%'(パーセント)・・・0文字以上の任意の文字列
②'_'(アンダースコア)・・・任意の1文字
nameの値がsから始まる文字列を取得
mysql> select * from users where name like 's%';
%はワイルドカード
0文字以上の任意の文字列を表す
nameの値がsaから始まる文字列を取得
mysql> select * from users where name like 'sa%';
大文字と小文字はは区別されない
mysql> select * from users where name like 'SA%';
結果は変わらない
aを含む文字列を取得
mysql> select * from users where name like '%a%';
nameにaを含むレコードが取得できた
aで終わる文字列を取得
mysql> select * from users where name like '%a';
次のような記述もできる!!
mysql> select * from users where name like '%a*k';
akという順番で少し曖昧な表現で
ネームカラムに含まれているものを探せる
ワイルドカードのもう一つのアンダースコアは
正確に一つの文字に一致する
6文字の文字列を取得
mysql> select * from users where name like '______';
6文字の文字列を取得できた!
2文字目がaの文字列を取得
mysql> select * from users where name like '_a%';
nameの2文字目がaのレコードを取得できた!
エイリアスを使おう
エイリアス
- カラム名にエイリアスをつけるとは、カラムにニックネームをつけること。
nameにnamae
ageにnenreiというエイリアスを設定して
usersテーブルから値を取得してみる
mysql> select name as namae, age as nenrei from users;
+-----------+--------+
| namae | nenrei |
+-----------+--------+
| sato | 18 |
| suzuki | 22 |
| takahashi | 29 |
| tanaka | 30 |
| ito | 19 |
| watanabe | 20 |
| yamamoto | NULL |
+-----------+--------+
※asは省略可能!
mysql> select name namae, age nenrei from users;
並び替えをしよう
取得するレコードの並び順について
- 並び順を指定しないと、どんな並び順になるかわからない。
- 取得するレコードの並び替えを行うには、order byを使って、並び順を指定する。
構文order by
構文
select カラム1,カラム2,.....from テーブル名 order by 並び順;
補足
> 並び順の指定は
asc ...昇順(ascending)
例) 1,2,3
デフォルト。並び順を指定しない場合はascになる。
desc...降順(descending)
例)3,2,1
年齢を昇順に並び替える
mysql> select * from users order by age asc;
年齢の昇順に並んだ
NULLについては無視
昇順の場合はascを省略可能
mysql> select * from users order by age;
年齢を降順に並び替える
mysql> select * from users order by age desc;
補足
並び順を変えることをソートとも呼ぶ
件数の制限をしよう
件数を制限して取得する
- 取得するレコード数を制限するにはlimitを使用
構文 limit
構文
select カラム1,カラム2,....from テーブル名 limit 最大取得件数;
3件に制限するには
mysql> select * from users limit 3
3件取得できた!
年齢を昇順にして先頭からデータを3つ取得
mysql> select * from users order by age asc limit 3;
ageがnullのデータを除外
mysql> select * from users where age is not null order by age asc limit 3;
nullを除外して先頭から3つデータを取得できた!
offset
offsetとはデータ取得の開始位置を指定して取得できる
3つoffset、つまり4番目からデータを取得できる!
mysql> select * from users where age is not null order by age asc limit 3 offset 3;
4番目からデータを取得できた!
データの更新をしよう
データの更新
- テーブルのデータを更新するにはupdateを使用
構文update
構文
update テーブル名 set カラム1 = 値1,set カラム2 = 値2,.....where = 条件式;
usersテーブルのid1のageを18から40に変える
mysql> update users set age = 40 where id = 1;
ageが40になった
複数のカラムを一度に更新するにはカンマ区切りで指定
mysql> update users set name = 'aaaaa', age = 41 where id = 1;
id1のレコードについてnameがaaaaa、ageが41に書き変わった
30歳以上のレコードについて99歳に書き換える
mysql> update users set age = 99 where age >= 30;
where句を指定しないこともできる
mysql> update users set name = 'hoge';
全てのレコードの値が更新される
便利な時がある反面、where句を書き忘れると意図しない更新が行われるので注意!!
👇
exit
データの削除をしよう
データの削除
- データの削除をするにはdeleteを使用
構文delete
構文
delete from テーブル名 where 削除条件;
idが1のレコードを削除
mysql> delete from users where id = 1;
id1のデータが削除された
年齢が20歳以上のレコードを削除
mysql> delete from users where age >= 20;
年齢が20歳以上のレコードが削除された
条件を指定しないと全件削除となる
mysql> delete from users;
Query OK, 2 rows affected (0.01 sec)
mysql> select * from users;
Empty set (0.00 sec)
条件を指定しないと全レコード削除となるので注意!!
削除したレコードは簡単には復旧できない
復旧の手段が全くないわけではないが、日常業務で行うような操作ではない
👇
exit
セクションまとめ
SQLまとめ
- create table
- insert
- select
- update
- delete
WEBアプリを開発する上で、データベースは必要不可欠
実務では、データベースの構築によって、システムの品質も大きく関わってくるので、知識が必要とされる。
MySQLの入門編一旦終わり!
なんとなく理解できてきたかな
明日からRuby on Railsに入る!
パワーー
Discussion
長すぎ!!
質問:CRUDは何でしょうか。
データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)の頭文字を繋げた語らしい🙃