導入
- 気にしません。
- MySQL はリレーショナル データベース管理システム (RDBMS) です。これは、構造化データをテーブルに保存および管理できる、オープンソースのマルチユーザー、マルチスレッドのデータベース システムです。 構造化照会言語 (SQL) を使用してデータを管理および操作します。
MySQL の主な機能:
- オープンソース
- クロスプラットフォーム
-
リレーショナル データベース: MySQL は、テーブル (リレーションとも呼ばれる) にデータを格納するリレーショナル データベース モデルに基づいています。
-
高性能: 速度が最適化されており、大量のデータを効率的に処理できます。
-
ACID 準拠: MySQL は ACID (原子性、一貫性、分離性、耐久性) プロパティをサポートし、データベース トランザクションが確実に処理されることを保証します。
- 原子性により、トランザクションが単一の分割不可能な単位として扱われることが保証されます。トランザクション内のすべての操作が正常に完了するか、いずれも適用されません。言い換えれば、トランザクションはアトミックであり、「全か無か」です。
- 一貫性により、トランザクションによってデータベースがある有効な状態から別の有効な状態に移行することが保証されます。トランザクション後は、すべてのデータが一貫した状態にあり、定義されたすべてのルール、制約、および関係に準拠している必要があります。
- 分離により、トランザクションが同時に発生した場合でも、トランザクションは互いに分離して実行されます。各トランザクションは、他のトランザクションからの干渉を防ぐために、それが処理されている唯一のトランザクションであるかのように実行される必要があります。
- 耐久性により、停電やクラッシュなどのシステム障害が発生した場合でも、トランザクションが一度コミットされると永続的になります。トランザクションによって行われた変更はディスクに保存され、後続の失敗が発生しても存続します。
-
マルチユーザー アクセス: MySQL では、パフォーマンスに影響を与えることなく、複数のユーザーがデータベースに同時にアクセスできます。
SQLキーワード
作成する
-
データベースを作成
- CREATE DATABASE コマンドは、新しいデータベースを作成するために使用されます。 Mongoose では、データベースを明示的に作成する必要はありません。データベースに接続すると自動的に作成されます。
// DB is created if it doesn't exist
mongoose.connect('mongodb://localhost/my_database');
CREATE DATABASE my_database;
-
データベースを使用する
- USE DB_NAME は、使用するデータベースを選択するために使用されます。 Mongoose では、これは接続文字列によって処理されます。
mongoose.connect('mongodb://localhost/my_database');
USE my_database;
-
テーブルを作成
- CREATE TABLE コマンドは、データベースに新しいテーブルを作成するために使用されます。 Mongoose では、これは新しいコレクションを作成することに似ています。
// DB is created if it doesn't exist
mongoose.connect('mongodb://localhost/my_database');
CREATE DATABASE my_database;
-
インデックスを作成
- CREATE INDEX コマンドは、クエリのパフォーマンスを向上させるためにテーブルにインデックスを作成するために使用されます。 MongoDB でもこれは同じです。
mongoose.connect('mongodb://localhost/my_database');
USE my_database;
説明する
- テーブルの構造 (列、データ型、制約など) を表示するために SQL で使用されます。 Mongoose の例: MongoDB には、DESCRIBE に直接相当するものはありません。ただし、スキーマをプログラムで検査することはできます。
mongoose.model('User', UserSchema);
CREATE TABLE Users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
入れる
- INSERT INTO コマンドは、テーブルに新しい行を挿入するために使用されます。 mongoose では、新しいドキュメントをコレクション/(モデル) に挿入します。
UserSchema.index({ email: 1 }); // Unnamed Index
UserSchema.index({ email: 1 }, { name: 'idx_email' }); // Named Index
-- Syntax: CREATE INDEX index_name ON table_name (column_name);
CREATE INDEX idx_email ON Users (email); -- Named Index
CREATE INDEX ON Users (email); -- Unnamed Index
選択
- SQL の SELECT ステートメントは、データベースからデータを取得するために使用されます。 Mongoose では、これは .find() メソッドを使用してコレクションをクエリすることと同じです。
console.log(UserSchema.paths);
// Outputs details about the schema fields and types
DESCRIBE Users;
アップデート
- UPDATE ステートメントは、テーブル内の既存のレコードを変更するために使用されます。 mongoose では、find and update または .update() を使用します。
// In mongoose its equivalent to .save() or .create();
const newUser = new User({ name: 'John Doe', email: 'john@example.com' });
newUser.save()
INSERT INTO Users (name, email)
VALUES ('John Doe', 'john@example.com');
消去
- DELETE ステートメントは、テーブル内の既存のレコードを削除するために使用されます。 mongoose では、deleteOne、deleteMany、または find and delete を使用します。
const users = await User.find(); // Fetches all users
const { name, email } = await User.findById(1); // Fetches user with id = 1
SELECT * FROM Users; -- all users
SELECT name, email FROM Users WHERE id = 1; -- user of id 1
変更
- SQL の ALTER TABLE ステートメントは、既存のテーブルの構造を変更する (列の追加、列の削除、列の変更) ために使用されます。
Mongoose では、これに相当する操作は、新しいフィールドを含めるようにスキーマを変更し、必要に応じて既存のドキュメントの更新を処理することになります。
// update all user of name kb
const query = { name: "kb" };
User.update(query, { name: "thekbbohara" })
-- update all user of name kb
UPDATE Users
SET name = "thekbbohara", email = "thekbbohara@gmail.com"
WHERE name = "kb";
参加する
- JOIN 句は、テーブル間の関連する列に基づいて、2 つ以上のテーブルの行を結合するために使用されます。 MongoDB では、リレーショナル データベースとは異なり、結合 がネイティブにサポートされていません。代わりに、通常は、同様の機能に $lookup などの 集約パイプライン を使用します。
User.deleteOne({ _id: 1 })
// All users whose name is notKb will be deleted.
User.deleteMany({ name: "notKb" })
内部結合
- INNER JOIN キーワードは、両方のテーブルで一致する値を持つレコードを選択します。
DELETE FROM Users WHERE id = 1;
DELETE FROM Users WHERE name = "notKb"
-- All users whose name is notKb will be deleted.
左結合
- LEFT JOIN キーワードは、左側のテーブル (table1) からすべてのレコードを返し、右側のテーブル (table2) から一致するレコード (存在する場合) を返します。
// Update the UserSchema to add the 'age' field
const UserSchema = new mongoose.Schema({
name: String,
email: String,
age: Number, // New field
});
右結合
- RIGHT JOIN キーワードは、右側のテーブル (table2) からすべてのレコードを返し、左側のテーブル (table1) から一致するレコード (存在する場合) を返します。
-- Adds an 'age' column to the Users table
ALTER TABLE Users ADD age INT;
-- Delete 'Email' column from Users table
ALTER TABLE Users DROP COLUMN email;
-- Makes 'id' column unsigned and auto-incrementing
ALTER TABLE Users MODIFY COLUMN id INT UNSIGNED AUTO_INCREMENT;
クロスジョイン
- CROSS JOIN キーワードは、両方のテーブル (table1 と table2) のすべてのレコードを返します。
// DB is created if it doesn't exist
mongoose.connect('mongodb://localhost/my_database');
データタイプ
MySQL には、文字列、数値、日付と時刻の 3 つの主要なデータ型があります。ただし、MongoDB にはさまざまなデータ型がありますが、MySQL のデータ型とは異なります。 MongoDB は BSON (バイナリ JSON) を使用してデータを保存し、豊富なデータ型セットをサポートします。 MySQL と MongoDB の一般的なデータ型の比較は次のとおりです:
文字列データ型
MySQL |
MongoDB (BSON) |
Notes |
CHAR, VARCHAR
|
String |
Both store textual data. MongoDB's String is analogous to VARCHAR. |
TEXT, TINYTEXT, etc. |
String |
No separate TEXT type in MongoDB; all textual data is stored as String. |
数値データ型
MySQL |
MongoDB (BSON) |
Notes |
INT, SMALLINT, etc. |
NumberInt |
Represents 32-bit integers. |
BIGINT |
NumberLong |
Represents 64-bit integers. |
FLOAT, DOUBLE
|
NumberDouble |
Represents floating-point numbers. |
DECIMAL, NUMERIC
|
String or custom |
MongoDB doesn't have an exact equivalent; use String for precision. |
日付と時刻のデータ型
MySQL |
MongoDB (BSON) |
Notes |
DATE |
Date |
Both store date-only values. |
DATETIME, TIMESTAMP
|
Date |
MongoDB stores both date and time as a Date object. |
TIME |
String or custom |
MongoDB does not have a direct TIME type; store as String if needed. |
YEAR |
String or Int
|
Represented using String or NumberInt. |
ブール値のデータ型
MySQL |
MongoDB (BSON) |
Notes |
BOOLEAN, TINYINT(1)
|
Boolean |
Both store true/false values. |
バイナリデータ型
MySQL |
MongoDB (BSON) |
Notes |
BLOB, TINYBLOB, etc. |
BinData |
MongoDB's BinData is used for storing binary data like files. |
JSON/配列データ型
MySQL |
MongoDB (BSON) |
Notes |
JSON |
Object |
MongoDB natively stores JSON-like documents as Object. |
N/A |
Array |
MongoDB has a native Array type for storing lists of values. |
他のデータ型
MySQL |
MongoDB (BSON) |
Notes |
ENUM |
String or custom |
Use a String field with validation for enumerated values. |
SET |
Array |
Use an Array to represent sets of values. |
N/A |
ObjectId |
Unique identifier type in MongoDB, typically used as a primary key. |
N/A |
Decimal128 |
Used for high-precision decimal numbers in MongoDB. |
主キー
- テーブル内の各行が一意の識別子を持つようにします。
// DB is created if it doesn't exist
mongoose.connect('mongodb://localhost/my_database');
CREATE DATABASE my_database;
外部キー
- 列の値が別のテーブルの値に対応していることを確認します。
mongoose.connect('mongodb://localhost/my_database');
USE my_database;
データの整合性と制約
-
NULL ではありません:
列に NULL 値を含めることができないようにします。
mongoose.model('User', UserSchema);
CREATE TABLE Users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
-
ユニーク:
列内のすべての値が一意であることを確認します。
UserSchema.index({ email: 1 }); // Unnamed Index
UserSchema.index({ email: 1 }, { name: 'idx_email' }); // Named Index
-- Syntax: CREATE INDEX index_name ON table_name (column_name);
CREATE INDEX idx_email ON Users (email); -- Named Index
CREATE INDEX ON Users (email); -- Unnamed Index
-
デフォルト:
値が指定されていない場合は、列にデフォルト値を割り当てます。
console.log(UserSchema.paths);
// Outputs details about the schema fields and types
DESCRIBE Users;
-
チェック (MySQL 8.0 ):
列の値が指定された条件を満たしていることを確認します。
// In mongoose its equivalent to .save() or .create();
const newUser = new User({ name: 'John Doe', email: 'john@example.com' });
newUser.save()
INSERT INTO Users (name, email)
VALUES ('John Doe', 'john@example.com');
-
AUTO_INCREMENT:
列の一意の値を自動的に生成します。主キーによく使用されます。
const users = await User.find(); // Fetches all users
const { name, email } = await User.findById(1); // Fetches user with id = 1
SELECT * FROM Users; -- all users
SELECT name, email FROM Users WHERE id = 1; -- user of id 1
それだけです。お気軽にフィードバックを残していただいても結構です。こちらからご連絡ください: thekbbohara
ああ、ところで、Mysql はどのように設定すればよいのでしょうか。
docker を使用することをお勧めします:
// update all user of name kb
const query = { name: "kb" };
User.update(query, { name: "thekbbohara" })
-- update all user of name kb
UPDATE Users
SET name = "thekbbohara", email = "thekbbohara@gmail.com"
WHERE name = "kb";
以上がMongoose 開発者向けの Mysql。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。