MySQLMySQLを使い始める

備考

MySQLロゴ

MySQLは、Oracle Corporationによって開発およびサポートされているオープンソースリレーショナルデータベース管理システム(RDBMS)です。

MySQLは、Linuxの亜種、OS X、Windowsなど、多数のプラットフォームでサポートされています。また、C、C ++、Java、Lua、.Net、Perl、PHP、Python、Rubyなど、多数の言語用のAPIも備えています

MariaDBはMySQLのフォークで、 機能セットが少し異なります 。これは、ほとんどのアプリケーションでMySQLと完全に互換性があります。

バージョン

バージョン発売日
1.0 1995-05-23
3.19 1996-12-01
3.20 1997-01-01
3.21 1998-10-01
3.22 1999-10-01
3.23 2001年1月22日
4.0 2003-03-01
4.1 2004年10月1日
5.0 2005-10-01
5.1 2008年11月27日
5.5 2010-11-01
5.6 2013-02-01
5.7 2015-10-01

入門

MySQLでのデータベースの作成

CREATE DATABASE mydb;
 

戻り値:

クエリOK、1行に影響(0.05秒)


作成されたデータベース mydb 使用

USE mydb;
 

戻り値:

データベースが変更されました

MySQLでのテーブルの作成

CREATE TABLE mytable
(
  id              int unsigned NOT NULL auto_increment,
  username        varchar(100) NOT NULL,
  email           varchar(100) NOT NULL,
  PRIMARY KEY     (id)
);
 

CREATE TABLE mytable は、 CREATE TABLE mytable という新しいテーブルを作成しmytable

id int unsigned NOT NULL auto_incrementid カラムを作成します。このタイプのフィールドは、テーブル内の各レコードに一意の数値IDを割り当てます(この場合、2つの行が同じid を持つことはできません)レコードのid フィールド(1から始まる)に固有の値。

戻り値:

クエリOK、影響を受けた0行(0.10秒)


MySQLテーブルに行を挿入する

INSERT INTO mytable ( username, email )
VALUES ( "myuser", "myuser@example.com" );
 

戻り値の例:

クエリOK、1行に影響(0.06秒)

varchar aka strings は、一重引用符を使用して挿入することもできます。

INSERT INTO mytable ( username, email )
VALUES ( 'username', 'username@example.com' );
 

行をMySQLテーブルに更新する

UPDATE mytable SET username="myuser" WHERE id=8
 

戻り値の例:

クエリOK、1行に影響(0.06秒)

int 値は引用符なしでクエリに挿入できます。文字列と日付は単一引用符で囲む必要があります' または二重引用符"


行をMySQLテーブルに削除する

DELETE FROM mytable WHERE id=8
 

戻り値の例:

クエリOK、1行に影響(0.06秒)

id が8の行が削除されます。


MySQLの条件に基づいて行を選択する

SELECT * FROM mytable WHERE username = "myuser";
 

戻り値:

+----+----------+---------------------+
| id | username | email               |
+----+----------+---------------------+
|  1 | myuser   | myuser@example.com  |
+----+----------+---------------------+
 

1行セット(0.00秒)


既存のデータベースのリストを表示する

SHOW databases;
 

戻り値:

+-------------------+
| Databases         |
+-------------------+
| information_schema|
| mydb              |
+-------------------+
 

2行セット(0.00秒)

"information_schema"はデータベースメタデータへのアクセスを提供する "マスターデータベース"と考えることができます。


既存のデータベースにテーブルを表示する

SHOW tables;
 

戻り値:

+----------------+
| Tables_in_mydb |
+----------------+
| mytable        |
+----------------+
 

1行セット(0.00秒)


テーブルのすべてのフィールドを表示する

DESCRIBE databaseName.tableName;
 

すでにデータベースを使用している場合は、

DESCRIBE tableName;
 

戻り値:

+-----------+----------------+--------+---------+-------------------+-------+
| Field     | Type           | Null   | Key     | Default           | Extra |
+-----------+----------------+--------+---------+-------------------+-------+
| fieldname | fieldvaluetype | NO/YES | keytype | defaultfieldvalue |       |
+-----------+----------------+--------+---------+-------------------+-------+
 

Extraauto_increment などが含まれます。

Key とは、フィールドに影響するキーのタイプを指します。プライマリ(PRI)、ユニーク(UNI)...

n行セット(0.00秒)

ここで、nはテーブル内のフィールドの数です。


ユーザーの作成

まず、ユーザーを作成し、特定のデータベース/テーブルに対してユーザーにアクセス許可を与える必要があります。ユーザーの作成時に、このユーザーがどこから接続できるかを指定する必要もあります。

CREATE USER 'user'@'localhost' IDENTIFIED BY 'some_password';
 

データベースがホストされているローカルマシン上でのみ接続できるユーザーを作成します。

CREATE USER 'user'@'%' IDENTIFIED BY 'some_password';
 

どこからでも接続できるユーザーを作成します(ローカルマシンを除く)。

戻り値の例:

クエリOK、影響を受けた0行(0.00秒)

特権の追加

指定されたデータベースのすべてのテーブルについて、共通の基本権限をユーザーに付与します。

GRANT SELECT, INSERT, UPDATE ON databaseName.* TO 'userName'@'localhost';
 

すべてのデータベースのすべてのテーブルに対するすべての権限をユーザに付与します(これに関する注意)。

GRANT ALL ON *.* TO 'userName'@'localhost' WITH GRANT OPTION;
 

上に示したように、 *.* はすべてのデータベースとテーブルを対象としていますが、 databaseName.* は特定のデータベースのすべてのテーブルを対象としています。 databaseName.tableNameのようにデータベースとテーブルを指定することもできdatabaseName.tableName

WITH GRANT OPTION は、ユーザーが他のユーザーに特権を与える必要がない場合はWITH GRANT OPTION ください。

特権は

ALL
 

またはコンマで区切られた以下の組み合わせ(非網羅的なリスト)を使用することができます。

SELECT
INSERT
UPDATE
DELETE
CREATE
DROP
 

注意

一般に、スペースまたはSQLで予約語を使用する列名または表名の使用を避けるようにしてください。例えば、それはのような名前を避けるのがベストですtable またはfirst name

そのような名前を使用する必要がある場合は、それらをバックティックの`` デリミタ`` 間に置いてください。例えば:

CREATE TABLE `table`
(   
   `first name` VARCHAR(30)
);
 

この表のバックティック区切り文字を含むクエリは次のようになります。

 SELECT `first name` FROM `table` WHERE `first name` LIKE 'a%';
 

情報スキーマの例

プロセスリスト

これは、すべてのアクティブな&スリープ状態のクエリをその順序で表示し、次にどれくらいの時間だけ表示します。
SELECT * FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;
 

これはデフォルトで秒単位であるため、時間枠に関するもう少し詳細です。

SELECT ID, USER, HOST, DB, COMMAND, 
TIME as time_seconds, 
ROUND(TIME / 60, 2) as time_minutes, 
ROUND(TIME / 60 / 60, 2) as time_hours, 
STATE, INFO
FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;
 

ストアドプロシージャの検索

単語やワイルドカードのすべてのStored Procedures を簡単に検索できます。

SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%word%';