MySQL チュートリアル
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_increment
はid
カラムを作成します。このタイプのフィールドは、テーブル内の各レコードに一意の数値IDを割り当てます(この場合、2つの行が同じid
を持つことはできません)レコードのid
フィールド(1から始まる)に固有の値。
戻り値:
クエリOK、影響を受けた0行(0.10秒)
MySQLテーブルに行を挿入する
INSERT INTO mytable ( username, email )
VALUES ( "myuser", "[email protected]" );
戻り値の例:
クエリOK、1行に影響(0.06秒)
varchar
aka strings
は、一重引用符を使用して挿入することもできます。
INSERT INTO mytable ( username, email )
VALUES ( 'username', '[email protected]' );
行を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 | [email protected] |
+----+----------+---------------------+
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 | |
+-----------+----------------+--------+---------+-------------------+-------+
Extra
はauto_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%';