소개
- 상관없어요
- 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에서 테이블의 구조(해당 열, 데이터 유형, 제약 조건 등)를 보는 데 사용됩니다. 몽구스 예: 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 명령은 테이블에 새 행을 삽입하는 데 사용됩니다. 몽구스에서는 컬렉션/(모델)에 새 문서를 삽입합니다.
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
로그인 후 복사
로그인 후 복사
업데이트
- UPDATE 문은 테이블의 기존 레코드를 수정하는 데 사용됩니다. 몽구스에서는 find 및 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 문은 테이블의 기존 레코드를 삭제하는 데 사용됩니다. 몽구스에서는 deleteOne, deleteMany 또는 find 및 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 절은 두 개 이상의 테이블 사이의 관련 열을 기준으로 두 개 이상의 테이블 행을 결합하는 데 사용됩니다. 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에는 문자열, 숫자, 날짜 및 시간의 세 가지 주요 데이터 유형이 있습니다. 하지만 MongoDB에는 다양한 데이터 유형이 있지만 MySQL의 데이터 유형과는 다릅니다. MongoDB는 다양한 데이터 유형 세트를 지원하는 BSON(Binary 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
로그인 후 복사
로그인 후 복사
-
확인(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');
로그인 후 복사
로그인 후 복사
-
자동 증가:
기본 키에 자주 사용되는 열의 고유 값을 자동으로 생성합니다.
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";
로그인 후 복사
로그인 후 복사
위 내용은 몽구스 개발자를 위한 MySQL.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!