基礎からのMYSQL

■データベースにログインする

mysql -u root -p
// root = ユーザー名

入力すると、次の行でパスワードを求められるので、入力する。

ちなみに、上のコマンドの-pのあとに続けてパスワードを入力することもできるが、入力したコマンドは保存される(矢印↑キーでこれまで入力したコマンドが呼び出せる機能がある)ので、セキュリティ上やらないほうがいい。

C:\Users\owner>mysql -u root -p
Enter password:

パスワードを入力すると、以下の表示が出る。

Welcome to the MariaDB monitor.  Commands end with ; or \g.

■操作するデータベースを指定する

use db1
// use データベース名

下記のように書いてもOK

¥u db1

なお、useはsql文ではないので;をつける必要はない。

■データの表示

・データベースを表示

show databases;

・テーブル一覧を表示

show tables;

・テーブルの情報を表示(文字コードがわかる)

SHOW CREATE TABLE テーブル名;

・カラムの情報を表示(データ型、Null、Key、Defaultなど)

DESC テーブル名;

■条件をつけてカラムを表示する

・カラムの順番を入れ替えて表示する。

select uria,bang from tb;
// select カラム名,カラム名 from テーブル名;

・レコード数を決めて表示する

select * from tb limit 3;
// select * from テーブル名 limit 値

・WHEREを使った抽出

select * from tb where uria >=100;
// select * from テーブル名 where カラム名 比較演算子 値;

・データを使って四則演算をする

select uria*10000 as 売上 from tb;

・関数を使う

select avg(uria) from tb;
// / uriaカラムのデータの平均を出す

select sum(uria) from tb;
// / uriaカラムのデータの合計を出す

■文字列を結合する

select concat(bang,nama,'さん')from tb1;
// select concat(カラム名,'文字列')from テーブル名;

concat()の引数は、カラム名だけでなく任意の文字列
('さん' や ' ' 半角スペースなど)も入れられる。

直前に発番された番号を取得する

$sql = 'SELECT LAST_INSERT_ID()';
$stmt = $dbh->prepare($sql);
$stmt->execute($data);
$rec = $stmt->fetch(PDO::FETCH_ASSOC);
$lastcode = $rec['LAST_INSERT_ID()'];
//取得した番号を$lastcodeに入れている

■エイリアスをつけてテーブルを表示

カラム名だけではなんの数字かわかりづらい場合に、ニックネームをつけてわかりやすくする。

下記の例だと、bang=社員番号 uria=売上 というエイリアスをつけている。

select bang as 社員番号,uria as 売上 from tb;
// select カラム名 as エイリアス名, カラム名 as エイリアス名 from テーブル名;

キャプチャ


■テーブルを作成する

create table tb1(bang varchar(10),nama varchar(10),tosi INT);
// create tabel テーブル名(カラム名 データ型);

varchar(n)のnには、文字数を入れる。(10)なら、10文字まで入るということ。

コピー

・カラム構造とレコードをコピー

CREATE TABLE tb1G SELECT * FROM tb1;
// create table 新しいテーブル名 (SELECT * FROM コピー元のテーブル名);

※auto_incrementなど一部の属性はコピーされない
※データ型が変更されてしまう場合もある。

そのため、コピーしたら必ずselect文で構造やデータ型をチェックする。

・カラム構造のみコピー

create table 新規テーブル名 like 元のテーブル名;

この方法だと、auto_incrementやprimary keyなどの属性もコピーされる

・他のテーブルのレコードをコピーする

insert into tb1I select * from tb1;

カラム構造のみコピーして作った空のテーブルにレコードを移す時などに使う。

・特定のカラムを選択してコピーする

insert into tb1I (nama) select bang from tb1;
// insert into テーブル名(カラム名) select 元のカラム名 from 元のテーブル名;

■削除

データベースの削除

drop database データベース名;

テーブルの削除

drop table テーブル名;

レコード全削除

delete from テーブル名;

特定のレコードだけを削除

$sql = "DELETE FROM post WHERE post_id = $post_code";
/ DELETE FROM テーブル名 WHERE カラム名 比較演算子 変数や値;

■主キーを設定する

create table itii(a int primary key,b varchar(10));
// create tabel テーブル名(カラム名 データ型 primary key);

キャプチャ

KeyがPRI(primary)、NullがNOになっているのがわかる。

既存のカラムにprimaryを追加する場合は、alter table modifyを使う

データベースは、大量のレコードの中から条件に合った1つのコードを特定することが必要になる。
社員1人1人に社員IDが重複しないように割り当てる、など。
このような状態を一意(ユニーク)であるという。

ユニークなレコードを作る場合、カラムに他のカラムと区別するための特別な属性を設定する。
この場合に使うのが、主キー。
主キーは数多くあるレコードのうちの1つを特定するために使う識別子です。

主キーは、
・値の重複がない
・なんのデータも入力しない(NULL)ことはできない。

例えば、カラムに社員IDを登録する際、主キーにすると、間違って同じIDを複数登録してしまったり、すでに存在するIDに変更してしまうことを防ぐことができる。

一意(ユニーク)キー

create table itii(a int UNIQUE,b varchar(10));
// create tabel テーブル名(カラム名 データ型 UNIQUE);

この場合、カラム内での重複はできないが、NULLを入力することはできる。

■他のデータベースへのアクセス

USEで操作するデータベースを設定していても、他データベースのテーブルを操作することはできる。
データベース名とテーブル名を「.」で繋げて書く。

SELECT * FROM db2.tb1;
//データベース名.テーブル名

■データを追加する

INSERT INTO テーブル名 VALUES(値)

INSERT INTO tb1 VALUES('A102','高橋',28);
// 
bang(番号),nama(名前),tosi(年齢)カラムが設定されている場合

複数まとめて追加

INSERT INTO tb1 VALUES('A102','高橋',28),
('A103','山田',48),('A104','田中',21),('A105','南',18);

特定のカラムにだけ値を追加

insert into ima (b) values(now());
// insert into テーブル名(値を追加したいカラム名) values(値や関数);

■入力履歴の一覧を見る

F7キーを押すと、履歴の一覧を確認できる

キャプチャ

SELECT文について

データベースと関係ない値を表示させることもできる。

SELECT 'テスト';

表示を確認した文字列や単純な関数の結果を確認するときに使える。

キャプチャ

・データベースを選択しなくても、データベース情報を確認する

 select user from mysql.user;

データベース名.カラム名

データ型

文字列型や数値型がある。

データベースのテーブルには、指定した形式のデータしか入力できない。

たとえば、数値型なら文字は入れられないし、日付型なら日時しか入れられない。
誤ったデータを入力される可能性を低くし、データベースの信頼性を保つための特徴。

MySQLは入力チェックがゆるいので、データ型と異なる値を入れてもエラーにならないことが多々ある。

文字列型 = 255文字まではVARCHAR、それ以上はTEXTと覚える

文字列の入力

エスケープ処理

「’」(シングルクオート)「”」(ダブルクオート)を文字列として入力する場合は、その前に¥をつける。

¥'ニシザワ'¥ = 'ニシザワ' とシングルクオートがついて表示される

■カラムの構造を変更する

カラムの構造(データ型)を変更する場合、
ALTER TABLEコマンドを使う。

・データ型を変更 ALTER TABLE ・・・MODIFY
・カラムを追加 ALTER TABLE ・・・ADD
・名前と定義を変更 ALTER TABLE ・・・CHANGE
・カラムを削除する ALTER TABLE ・・・DROP

データ型を変更 ALTER TABLE ・・・MODIFY

alter table tb1c modify nama varchar(100);
// alter table テーブル名 modify カラム名 データ型(変更したい型);

カラムを追加 ALTER TABLE ・・・ADD

alter table tb1c add umare datetime;
// alter table テーブル名 add カラム名 データ型;

カラム順を変更、任意の場所に追加する方法
※既存のカラムの位置を変更する場合でも、データ型は省略せずに書く必要がある。

alter table tb1c add umare datetime FIRST;
// カラムを先頭に追加する場合、データ型の後ろにFIRSTをつける。
// 既存のカラム位置を変更する場合はaddをmodifyにすればOK

alter table tb1c add umare datetime AFTER bang;
// カラムを先頭に追加する場合、bangの後ろにumareを追加する。
// 既存のカラム位置を変更する場合はaddをmodifyにすればOK

名前と定義を変更 ALTER TABLE ・・・CHANGE

alter table tb1c change umare seinen date;
// alter tabel テーブル名 change 元のカラム名 変更後カラム名 変更後データ型;

カラムを削除する ALTER TABLE ・・・DROP

alter table tb1c drop seinen;
// alter tabel テーブル名 drop カラム名;

変更は慎重に。
例えば100文字入力されているカラムをVARCHAR(50)に変えたら、50文字目以降は消えてしまう。

■オートインクリメント(AUTO_INCRIMENT)

自動で番号を振り分ける設定。

alter table renzoku modify a int auto_increment primary key;
// alter table テーブル名 modify カラム名 データ型 auto_increment primary key;

キャプチャ

insert into renzoku (b) values('子');
insert into renzoku (b) values('丑');
insert into renzoku (b) values('寅');

ここに上記のデータを追加すると

キャプチャ

bカラムにしかデータを追加していないが、aカラムには自動で数字が連続で割り振られている。

オートインクリメントのリセット

途中でレコード削除しても、番号の振り分け履歴は残る。
1~4までレコードを作って、削除した場合、次にレコードを作ると1からではなく、5から始まる。

そのため、1から始めたい場合は、以下を入力してリセットする。

alter table renzoku auto_increment=0;

カラムの初期値を設定する

何も入力しなければ、あらかじめ設定してあるデータが勝手に入力されるカラム、いわゆるデフォルトを設定する方法

create table テーブル名 (カラム名 データ型 DEFAULT 初期値):

既存のカラム名にデフォルト値を追加する場合

alter table tb1G modify nama varchar(10) default'氏名未入力';
// alter table テーブル名 modify カラム名 データ型 default 値;

■インデックス

テーブルのデータを検索するとき、データの数が膨大だとすべてのレコードの情報を調べるのに時間がかかる。
インデックスを設定し、検索にテーブルそのものではなくインデックスを使うと検索の時間が短縮される可能性がある。

インデックスの設定

create index my_ind on tb1G(bang);
// create index / create index インデックス名 on テーブル名(カラム名)

表示

show index from テーブル名;
// 結果が見づらい場合、; を ¥Gに変えると見やすくなる。

削除

drop index インデックス名 on テーブル名;






この記事が気に入ったらサポートをしてみませんか?