MariaDB/MySQLのCREATE DATABASEで、新しいDBを作る操作と、既存DBの確認・既定値変更・データ変換・削除を分けて説明します。元の書式付き構文/例と既存のMySQL教材も残し、製品差や破壊的操作の条件を補っています。
作成前に製品と対象を確認する
以下は新しく用意したローカル検体専用です。本番DBや他人のDBへ試すための例ではありません。既に存在するDBを上書き/削除して接続を直すのではなく、接続先・DB名・必要権限と既定値を確認します。
-- Read only. Confirm the product, account and intended local fixture first.
SELECT VERSION() AS server_version, CURRENT_USER() AS authenticated_account,
DATABASE() AS selected_database, @@character_set_server AS server_charset,
@@collation_server AS server_collation, @@lower_case_table_names AS name_mode;
新しいDBを明示した属性で作る
次は存在しない専用検体名でだけ実行した例です。utf8mb4_unicode_ciを両製品の検査用に明示しており、全用途の最適な照合順序という意味ではありません。文字の等価性/並び/UNIQUE/末尾空白/版間互換を要件ごとに調べます。アプリ用アカウントへCREATE/ALLを自動付与する手順ではありません。
-- New disposable fixture only. Not a universal recommended collation.
CREATE DATABASE cwiki_w22_new CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Metadata for this owned fixture only; visibility depends on privileges.
SHOW CREATE DATABASE cwiki_w22_new;
SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'cwiki_w22_new';
IF NOT EXISTSは既存設定を揃えない
次のcwiki_w22_existingは、latin1/latin1_swedish_ciのDBと1行の表をあらかじめ作った検体です。両製品で1007の警告となり、既存DBの属性とデータはそのまま残りました。「エラーにならない」だけで要求した属性へ揃った/移行できたとは判断しません。
-- The fixture DB already exists. This does not convert its defaults or data.
CREATE DATABASE IF NOT EXISTS cwiki_w22_existing
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW WARNINGS;
MariaDBにはOR REPLACEもありますが、これはIF NOT EXISTSの安全な言換えではありません。新しい使い捨て検体では、再作成により元の表が失われました。同じ構文をMySQL8.4.13へ与える検査は1064で拒否されました。エラー回避のために既存DBへ追加しないでください。
DBの既定変更は既存列の変換ではない
次は専用検体のDB既定だけを変更する例です。この後に作った表の列はutf8mb4を継承しましたが、既存表の列はlatin1のままで、元の行も残りました。ALTER TABLEによるデータ変換とは別で、実データへの変換・索引/UNIQUE/外部キー/復旧の検査は今回の例では行っていません。
-- Changes only the default of a new owned fixture; not existing columns.
ALTER DATABASE cwiki_w22_existing
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
検体のサーバー既定はMySQLがutf8mb4_0900_ai_ci、MariaDBがutf8mb4_uca1400_ai_ciでした。また両方で0900という照合順序名が存在しました。名前の有無だけで両製品の比較規則/重み/互換まで等しいとは扱わず、古い「MariaDBでは必ず使えない」という一般化もしません。実版と定義/比較結果を確認します。
削除・dump・import・Laravel操作は別作業
CREATE DATABASEとDROP DATABASEは今回の両検体でROLLBACKの取消対象になりませんでした。バックアップのコマンドを1回実行しただけで、必要範囲を保護し復元できると保証しません。dumpには機密データも含まれ得ます。出力先/権限/整合した取得・終了結果/必要なルーチンやイベント/別環境への復元確認を計画し、既存DBへimportしたりSQL中のUSE/DDLを未確認で流したりしません。
migrate、db:wipe、migrate:freshは接続確認やDB名作成の一連の操作ではありません。CWikiではmigrateを実行せず、本記事の検査でもLaravelのschema変更を使っていません。既存my.cnfの変更/サービス再起動、root/広いGRANT/%追加や通常のアカウント管理後のFLUSHも自動対処にしません。
書式付きの元構文と既存の比較教材
以下は元の構文/確認例と、その後の教材です。誤った非コードのセルは直接訂正し、危険な旧コードは直前の注意付きで保持しています。公開例のパスワードは実運用へ使わないでください。
MariaDBのデータベース新規作成SQLです。
構文
※ []は任意
元例の注意:日本語と角括弧は構文の説明です。実DB名/製品/権限を確認し、存在確認なしのCREATEを既存環境へ試しません。
|
CREATE DATABASE データベース名 [CHARACTER SET 文字コード]; |
文字コードの確認コマンド
元例の注意:元のSHOW CREATE DATABASEは指定したDB定義の確認です。置換箇所/空白を確認し、実行権限と対象を照合します。
|
SHOW CREATE DATABASE データベース名 |
元例の注意:角括弧/日本語は任意指定と置換箇所を示す構文です。全指定を文字どおり実行するSQLではありません。
|
CREATE DATABASE [IF NOT EXISTS] データベース名 |
元例の注意:元の照合順序/名前は例で、全用途の推奨ではありません。既存DBへ上書きや再作成をしません。
|
CREATE DATABASE myapp |
元例の注意:元のmyappは検体名の例で、意図したDBへ置き換えて権限/対象を確認します。
|
SHOW CREATE DATABASE myapp; |
元例の注意:指定schemaの既定値を読む例で、既存の全列が同じ属性という証明ではありません。
|
SELECT schema_name, default_character_set_name, default_collation_name |
元例の注意:IF NOT EXISTSは既存属性を揃える保証ではありません。対象版/設定の実値を別に読みます。
| オプション | 意味 | 備考 |
|---|---|---|
IF NOT EXISTS | 同名の DB があってもエラーにしない | 作成済みの判定だけで、既存属性との一致は保証しない |
CHARACTER SET | 既定文字コード | 多くの場面で utf8mb4 |
COLLATE | 照合順序 (大文字小文字・全半角等の比較ルール) | 製品/版/設定の既定を確認。MariaDBをunicode_ci固定と扱わない |
元例の注意:旧選定表は万能推奨ではありません。性能/互換性と大小/幅/末尾空白等を実際の要件で確認します。
| 選定 | 理由 |
|---|---|
| CHARACTER SET utf8mb4 | 絵文字を含む 4 バイト文字 (一部の漢字含む) を正しく保存できる |
| COLLATE utf8mb4_0900_ai_ci (MySQL 8.0+) | MySQLのUCA9.0系の名前。最新Unicodeや両製品の比較結果の一致を意味しない |
| COLLATE utf8mb4_unicode_ci | 従来から広く使われ、MariaDB でも利用可 |
| COLLATE utf8mb4_bin | 比較規則/末尾空白等を要件ごとに検査し、文字列の完全一致を一律保証しない |
元例の注意:削除と属性変更を含む旧列を一括実行しません。DROP後にALTERして元へ戻る手順でもありません。
|
-- 一覧表示 |
元例の注意:公開された仮の秘密値/%/権限の例です。不要なCRUDをまとめて付けず、FLUSHを通常手順にしません。
|
CREATE USER 'app'@'%' IDENTIFIED BY '***'; |
補足:既存の作成・管理例
旧例の注意:作成と削除/権限/移行/schema変更を分ける要約へ訂正しました。照合順序/GRANT ALL/FLUSH/migrateを一律に組み合わせません。
| この記事の要点 |
|
基本: CREATE DATABASE
旧例の注意:最小形と属性指定は代替例で同名への連続実行を推奨しません。IF NOT EXISTSで既存DBの属性が揃うわけではありません。
-- 最小形
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 バイト) や一部漢字を保存できません。Unicode文字を扱う要件と対象製品のcharsetを確認します。MySQLのutf8略記を全MariaDB版へ無条件に適用しません。
旧例の注意:文字コードの概要で、接続/既存列/実データを一括変換する命令ではありません。MariaDBのutf8別名は対象版/設定を確認します。
| charset | バイト数 | 絵文字 | 用途 |
|---|---|---|---|
| utf8 (= utf8mb3) | 1〜3 | NG | ★ 非推奨。古い DB のみ |
| utf8mb4 | 1〜4 | OK | ★★★ 推奨 |
| latin1 | 1 | NG | レガシー欧文のみ |
旧例の注意:名前だけで性能/Unicodeの新しさ/版間互換を保証しません。等価性/並び/末尾空白等を実要件で検査します。
| collation | 意味 |
|---|---|
| utf8mb4_general_ci | 旧来の比較規則。速度/一致要件を実測し、全言語で不正確と一律に判断しない |
| utf8mb4_unicode_ci | 検査例でも使った照合順序。全用途の万能推奨ではない |
| utf8mb4_unicode_520_ci | より新しい Unicode 5.2.0 ベース |
| utf8mb4_0900_ai_ci | MySQL8.4検体の既定はこの名前。UCA9.0系で、最新Unicodeという意味ではない |
| utf8mb4_bin | バイナリ比較。大文字小文字を区別 |
DROP DATABASE — ROLLBACKでは戻せない
旧例の注意:DROPとshellのmysqldumpが混在する破壊的な旧例で、一括実行しません。dump成功と復元可能性/停止時点は別に確認し、ROLLBACKで削除を戻せると扱いません。
DROP DATABASE mydb; -- ★ 即削除、復元不可 (バックアップから戻すしかない)
DROP DATABASE IF EXISTS mydb; -- 存在しなくてもエラーにしない
-- ★ 本番では必ずバックアップ後に
mysqldump -u root -p mydb > backup_$(date +%Y%m%d).sql
DROP DATABASE mydb;
ユーザー作成と権限付与
旧例の注意:公開パスワード/%/広いGRANTを既存環境へ追加せず、実行用と変更用の権限を分けます。通常のCREATE USER/GRANT後のFLUSHは不要です。
-- 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'@'%';
権限の代表的なもの
旧例の注意:権限レベル/対象により範囲が異なります。ALLを全server権限やGRANT OPTION込みの意味にしません。
| 権限 | 意味 |
|---|---|
SELECT | SELECT 文の実行 |
INSERT | INSERT 文の実行 |
UPDATE | UPDATE 文の実行 |
DELETE | DELETE 文の実行 |
CREATE / DROP | テーブル等の作成/削除 |
ALTER | テーブル定義変更 |
INDEX | インデックス作成/削除 |
EXECUTE | ストアドプロシージャ実行 |
ALL PRIVILEGES | 指定した権限レベルで該当する権限。全server権限やGRANT OPTIONを無条件に含む意味ではない |
GRANT OPTION | 他ユーザーに権限を与える権利 |
SQL ダンプのインポート / エクスポート
旧例の注意:root/全DB/pipe直結を既存環境の通常手順にしません。機密・一貫性・終了コード/取得範囲と復元を確認し、SQL中のUSE/DDLも未確認で流しません。実backup/importは今回未検証です。
# エクスポート
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 ツール
旧例の注意:既存ツール名の参考表です。対応版/OS/edition/配布・利用条件を公式に調べ、全サービスの標準導入や無条件無料/最良UIと判断しません。
| ツール | 特徴 |
|---|---|
| phpMyAdmin | Webブラウザベース。全レンタルサーバーの標準導入とは限らない |
| MySQL Workbench | 公式デスクトップ。ER 図、モデリング、管理 |
| DBeaver | マルチDB対応。対象edition/配布条件は別に確認 |
| HeidiSQL | Windows 軽量 |
| Sequel Ace (Mac) | Sequel Pro 後継、Mac 専用 |
| TablePlus | 対象OS/必要機能/利用条件を公式に確認。UIの優劣を一律評価しない |
information_schema で情報取得
旧例の注意:見える情報は権限等に依存します。InnoDBのtable_rows/サイズ等の概算を実件数/backup必要容量と同一視せず、全DB情報を公開しません。
-- 全 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 作成 / マイグレーション
旧例の注意:Laravel固有の旧例で、SQL shellへ貼り付けません。migrate/db:wipe/migrate:freshはschema/データへ影響する別作業です。CWikiではmigrateを実行せず、接続試験のための全削除/初期化もしません。
# .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旧例の注意:Laravel migrationの定義例で、新DB作成/接続確認とは別です。既存users表へ実行せず、downが任意のデータを元通りに復元する保証とも扱いません。
<?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 のデフォルト設定
旧例の注意:既存my.cnfへの追記やサービス再起動を推奨しません。server/client/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 指定省略可
よくあるエラー
旧例の注意:旧設定/191固定/広いGRANTや一括変換を自動対処にしないよう訂正しました。エラー番号だけで原因と変更を確定しません。
| エラー | 原因 | 対処 |
|---|---|---|
ERROR 1007 (HY000): Can't create database; exists | 既存 DB | 既存DBの対象/属性を確認。IF NOT EXISTSは属性の一致や変換を保証しない |
ERROR 1044 (42000): Access denied | 権限不足 | 対象/必要権限を承認された管理者が確認。root/全権限へ自動的に切り替えない |
4 バイト文字で Incorrect string value | utf8 (mb3) | 実データ・接続/列型/charsetを確認。一括変換は別途設計/復旧検証 |
ERROR 1071: Specified key was too long | InnoDB の VARCHAR(255) インデックス × utf8mb4 | 版/行形式/索引列/ページ設定等を確認。旧innodb_large_prefixや191固定を現行の万能対処にしない |
FAQ
Q: utf8 で作った既存 DB を utf8mb4 に変換できる?
A: DBの既定変更と既存表/列のデータ変換は別です。ALTER DATABASEだけでは既存列は変わりません。実データ/索引/UNIQUE/外部キー/停止影響と復元を調べ、一括変換の実行手順として流用しません。
Q: 命名規則は?
A: 識別子規則、lower_case_table_names/ファイルシステム/対象版と移行先を確認します。Linux/Windowsという名前だけで全構成の挙動を決めず、既存の名前を一括変更しません。
Q: DB を別サーバへ移行したい
A: データ量だけで方式を決めず、一貫性/停止条件/対応版/対象範囲/権限/復元・切替と戻し方を計画します。dumpのpipe直結やreplica昇格を自動的な移行手順にしません。
確認範囲と関連ページ
2026年10月26日確認。掲載した新7SQLは独立したMySQL8.4.13/MariaDB11.8.9の新規tmpfs検体で実行しました。既存DBのIF NOT EXISTSと警告、既定変更と既存列、CREATE/DROPのROLLBACK不可、InnoDB検体のCOMMIT/ROLLBACK、読取権限とCREATE拒否を確認しています。既存本番DBのDDL/データ/設定/アカウントは変更していません。一般DB比較の全製品、旧全コード、実backup/restore/import/replication、全照合順序の重み/Unicode比較、OS間差や障害耐久性、LaravelのDDLを実行検証したものではありません。
データベース関連の親ページから子ページを選択できます。データベースの作成、MySQL/MariaDB配下のSQL、テーブル関連、同じ製品配下のユーザー関連、MySQL/MariaDBの親ページも参照します。
一次資料:MariaDB CREATE DATABASEとOR REPLACE、MySQL CREATE DATABASE、MySQLのDB既定変更、MariaDBのDB既定変更、InnoDBの分離レベル、MongoDBのトランザクション、ClickHouseの列指向モデル、Cassandraのwide-columnモデル、MyBatisのSQLマッピング。
子ページはありません
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09