ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: CREATE DATABASE
-- 最小形
CREATE DATABASE mydb;
-- ★ 推奨: 文字コードと照合順序を明示
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 既存ならスキップ (エラーにしない)
CREATE DATABASE IF NOT EXISTS mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 確認
SHOW DATABASES;
SHOW CREATE DATABASE mydb;
文字コード: なぜ utf8mb4 か
MySQL の utf8 は歴史的事情で 3 バイトまでの制限があり、絵文字 (4 バイト) や一部漢字を保存できません。新規 DB は必ず utf8mb4 を選びます。
| charset | バイト数 | 絵文字 | 用途 |
|---|---|---|---|
| utf8 (= utf8mb3) | 1〜3 | NG | ★ 非推奨。古い DB のみ |
| utf8mb4 | 1〜4 | OK | ★★★ 推奨 |
| latin1 | 1 | NG | レガシー欧文のみ |
| collation | 意味 |
|---|---|
| utf8mb4_general_ci | 高速だが旧式。多言語比較で正確でない |
| utf8mb4_unicode_ci | ★ Unicode 標準準拠 (一般推奨) |
| utf8mb4_unicode_520_ci | より新しい Unicode 5.2.0 ベース |
| utf8mb4_0900_ai_ci | MySQL 8 デフォルト、最新 Unicode 9 |
| utf8mb4_bin | バイナリ比較。大文字小文字を区別 |
DROP DATABASE — 削除は復元不可
DROP DATABASE mydb; -- ★ 即削除、復元不可 (バックアップから戻すしかない)
DROP DATABASE IF EXISTS mydb; -- 存在しなくてもエラーにしない
-- ★ 本番では必ずバックアップ後に
mysqldump -u root -p mydb > backup_$(date +%Y%m%d).sql
DROP DATABASE mydb;
ユーザー作成と権限付与
-- 1. ユーザー作成 (MySQL 8+ 構文)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'strong_password';
-- 2. 特定 DB のみ権限付与
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'%';
-- 細かく付与
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'readwrite'@'%';
GRANT SELECT ON mydb.* TO 'readonly'@'%';
-- 3. 反映
FLUSH PRIVILEGES;
-- 4. 確認
SHOW GRANTS FOR 'app_user'@'%';
-- 削除
REVOKE ALL PRIVILEGES ON mydb.* FROM 'app_user'@'%';
DROP USER 'app_user'@'%';
権限の代表的なもの
| 権限 | 意味 |
|---|---|
SELECT | SELECT 文の実行 |
INSERT | INSERT 文の実行 |
UPDATE | UPDATE 文の実行 |
DELETE | DELETE 文の実行 |
CREATE / DROP | テーブル等の作成/削除 |
ALTER | テーブル定義変更 |
INDEX | インデックス作成/削除 |
EXECUTE | ストアドプロシージャ実行 |
ALL PRIVILEGES | 上記すべて (GRANT 除く) |
GRANT OPTION | 他ユーザーに権限を与える権利 |
SQL ダンプのインポート / エクスポート
# エクスポート
mysqldump -u root -p mydb > dump.sql
mysqldump -u root -p mydb table1 table2 > partial.sql # テーブル単位
mysqldump -u root -p --all-databases > all.sql # 全 DB
mysqldump -u root -p --no-data mydb > schema.sql # スキーマのみ
mysqldump -u root -p --routines --triggers mydb > full.sql # ストアド/トリガー含む
# 圧縮
mysqldump -u root -p mydb | gzip > dump.sql.gz
# インポート (★ DB は事前に作成しておく)
mysql -u root -p mydb < dump.sql
gunzip -c dump.sql.gz | mysql -u root -p mydb
# DB 作成も含むダンプ
mysqldump --databases mydb > dump.sql
# → CREATE DATABASE mydb; USE mydb; ... が含まれる
mysql -u root -p < dump.sql
GUI ツール
| ツール | 特徴 |
|---|---|
| phpMyAdmin | Web ブラウザベース。レンタルサーバ標準 |
| MySQL Workbench | 公式デスクトップ。ER 図、モデリング、管理 |
| DBeaver | マルチ DB 対応。無料 |
| HeidiSQL | Windows 軽量 |
| Sequel Ace (Mac) | Sequel Pro 後継、Mac 専用 |
| TablePlus | 有料だが UI 優秀 |
information_schema で情報取得
-- 全 DB の一覧と文字コード
SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.SCHEMATA;
-- 特定 DB のテーブル一覧
SELECT table_name, engine, table_rows, data_length
FROM information_schema.TABLES
WHERE table_schema = 'mydb';
-- 特定テーブルのカラム
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.COLUMNS
WHERE table_schema = 'mydb' AND table_name = 'users';
-- DB ごとのサイズ (MB)
SELECT table_schema AS db,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS size_mb
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY size_mb DESC;
Laravel での DB 作成 / マイグレーション
# .env で接続情報設定
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=app_user
DB_PASSWORD=strong_password
# DB 接続確認
php artisan tinker
>>> DB::connection()->getPdo();
# マイグレーション実行
php artisan migrate
# 全テーブル削除 (★ 危険、ローカルのみ)
php artisan db:wipe
# 全リセット + シーディング
php artisan migrate:fresh --seed
# 個別マイグレーション作成
php artisan make:migration create_users_table<?php
// database/migrations/YYYY_MM_DD_create_users_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
};
my.cnf で DB のデフォルト設定
# /etc/mysql/my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# クライアント側
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
# これで CREATE DATABASE 時に CHARACTER SET 指定省略可
よくあるエラー
| エラー | 原因 | 対処 |
|---|---|---|
ERROR 1007 (HY000): Can't create database; exists | 既存 DB | IF NOT EXISTS |
ERROR 1044 (42000): Access denied | 権限不足 | root で GRANT |
4 バイト文字で Incorrect string value | utf8 (mb3) | utf8mb4 へ変換 |
ERROR 1071: Specified key was too long | InnoDB の VARCHAR(255) インデックス × utf8mb4 | 長さを 191 に / innodb_large_prefix |
FAQ
Q: utf8 で作った既存 DB を utf8mb4 に変換できる?
A: ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + 各テーブル ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 ...; で変換可。VARCHAR インデックス長に注意。
Q: 命名規則は?
A: 小文字スネークケース (my_app_db) が無難。MySQL の Linux 環境はテーブル名が大文字小文字区別なので、混在すると Windows と挙動が変わる。
Q: DB を別サーバへ移行したい
A: 小規模なら mysqldump | mysql -h newhost。大規模は MySQL レプリケーションを張り、切替時にプライマリ昇格。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?