🥕

MySQL入門②

2023/02/11に公開
2

作業用ユーザーの作成

今まで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は何でしょうか。

sayasaya

データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)の頭文字を繋げた語らしい🙃