クエリ結果をオブジェクトまたは配列に変換する
実際の開発では、一部のクエリ結果を実際にオブジェクトに入れる必要があります
JSON_OBJECT: () はキーと値の形式です。
SELECT products.id as id, products.title as title, products.price as price, products.score as score, JSON_OBJECT('id', brand.id, 'name', brand.name, 'rank', brand.phoneRank, 'website', brand.website) as brand FROM products LEFT JOIN brand ON products.brand_id = brand.id;
多対多の関係では、クエリしたいのは配列です:
Forたとえば、学生の複数のコース情報を配列に配置する必要があります;
配列にはコース情報のオブジェクトが格納されます;
現時点では、 JSON_ARRAYAGG と JSON_OBJECT を組み合わせて使用する必要があります;
##
SELECT stu.id, stu.name, stu.age, JSON_ARRAYAGG(JSON_OBJECT('id', cs.id, 'name', cs.name)) as courses FROM students stu LEFT JOIN students_select_courses ssc ON stu.id = ssc.student_id LEFT JOIN courses cs ON ssc.course_id = cs.id GROUP BY stu.id;mysql2
## の使用法#mysql2 のインストール:
npm install mysql2
簡単な使用法:
const mysql = require('mysql2'); // 1.创建数据库连接 const connection = mysql.createConnection({ host: 'localhost', port: 3306, database: 'coderhub', user: 'root', password: 'Coderwhy888.' }); // 2.执行SQL语句 const statement = ` SELECT * FROM products WHERE price > 6000; ` connection.query(statement, (err, results, fields) => { console.log(results); });
データを取得した後にサービスを停止したい場合は、コールバック関数を記述できます:
connection.end()
完全なコード:
connection.query(statement, (err, results, fields) => { console.log(results); connection.end(); });
Prepared Statement(前処理されたステートメント)
パフォーマンスの向上: 作成されたステートメント モジュールを MySQL に送信し、MySQL がステートメント モジュールをコンパイル (解析、最適化、変換) して保存します
後で実際に実行するときは、#? に実際のパラメータを指定して実行します; 複数回実行してもコンパイルは 1 回だけなので、パフォーマンスが高くなります; 強調: ステートメントが再度実行されると、ステートメントは LRU (最も最近使用された) キャッシュから取得され、パフォーマンスを向上させるためにステートメントをコンパイルする時間が省略されます。
// 2.执行SQL语句: 使用 ?来对参数进行占位 const statement = ` SELECT * FROM products WHERE price > ? AND score > ?; ` connection.execute(statement, [6000, 7], (err, results) => { console.log(results); });接続プール先ほど接続 (接続) を作成しましたが、複数のリクエストがある場合、接続が占有される可能性があります。その場合、毎回新しい接続を作成する必要がありますか?リクエストが行われるタイミングは? 実際、mysql2 は接続プールを提供します;
- 接続プールは、必要に応じて接続を自動的に作成できます。破棄されますが、接続プールに配置され、後で使用できます。
- #接続プールの作成時に、作成の最大数である LIMIT を設定できます。;
- 接続が成功したかどうかを判断する
const mysql = require('mysql2'); // 1.创建连接池 const connections = mysql.createPool({ host: 'localhost', port: 3306, database: 'coderhub', user: 'root', password: 'Coderwhy888.', connectionLimit: 10 }); connections.getConnection((err, conn) => { conn.connect((err) => { if(err){ console.log('连接失败:',err) } else { console.log('数据库连接成功~') } }) })データベースの簡単な使用法
const mysql = require('mysql2'); // 1.创建连接池 const connections = mysql.createPool({ host: 'localhost', port: 3306, database: 'coderhub', user: 'root', password: 'Coderwhy888.', connectionLimit: 10 }); // 2.使用连接池 const statement = ` SELECT * FROM products WHERE price > ? AND score > ?; ` connections.execute(statement, [6000, 7], (err, results) => { console.log(results); });Promise メソッド
const mysql = require('mysql2'); // 1.创建连接池 const connections = mysql.createPool({ host: 'localhost', port: 3306, database: 'coderhub', user: 'root', password: 'Coderwhy888.', connectionLimit: 10 }); // 2.使用连接池 const statement = ` SELECT * FROM products WHERE price > ? AND score > ?; ` connections.promise().execute(statement, [6000, 7]).then(([results,fields]) => { console.log(results); }).catch(err => { console.log(err); });sequelize
オブジェクト リレーショナル マッピング (ORM)
: これはプログラミング ソリューションです:効果の点では、プログラミング言語で使用できる効果を提供します。
- 仮想オブジェクト データベースを使用する効果
- ;
通常使用する Node の ORM は Sequelize;
- 多くの機能をサポートしています。機能;
- MySQL で Sequelize を使用したい場合は、最初に 2 つのものをインストールする必要があります:
- sequelize: オブジェクトをテーブルにマップするために使用します;
-
npm install sequelize mysql2
Sequelize の使用
const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('coderhub', 'root', 'Coderwhy888.', { host: 'localhost', dialect: 'mysql'//连接的数据库类型:mysql,mongoose }); sequelize.authenticate().then(() => { console.log("连接数据库成功~"); }).catch(err => { console.log("连接数据库失败~", err); });Sequelizeの単一テーブル操作
const { Sequelize, DataTypes, Model, Op } = require('sequelize'); const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', { host: 'localhost', dialect: 'mysql' }) //1.首先我们需要将数据库中的一张表映射成一个class类 class Product extends Model {} Product.init({ id: { type: DataTypes.INTEGER, primaryKey: true,//主键 autoIncrement: true//自动增长 }, title: { type: DataTypes.STRING, allowNotNull: false//是否可以为空 }, price: DataTypes.DOUBLE, score: DataTypes.DOUBLE }, {//与数据库的表进行映射的配置 tableName: 'products', createdAt: false, updatedAt: false, sequelize }); //存放操作数据库的代码 async function queryProducts() { //1.查询数据库中product表中所有的内容 const result1 = await Product.findAll({ where: {//在这里配置条件 price: { [Op.gte]: 5000//意思是价格大于等于5000 //gte:大于等于,gt:大于,lt:小于,lte:小于等于 } } }); console.log(result1); // 2.插入数据 const result2 = await Product.create({ title: "三星Nova", price: 8888, score: 5.5 }); console.log(result2); // 3.更新数据 const result3 = await Product.update({ price: 3688 }, { where: { id: 1 } }); console.log(result3); } queryProducts();//执行这个函数可以实现对数据库的操作Sequelizeの1対多操作
const { Sequelize, DataTypes, Model, Op } = require('sequelize');
const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {
host: 'localhost',
dialect: 'mysql'
});
//数据库的第一个表: 主表
class Brand extends Model {};
Brand.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNotNull: false
},
website: DataTypes.STRING,
phoneRank: DataTypes.INTEGER
}, {
tableName: 'brand',
createdAt: false,
updatedAt: false,
sequelize
});
//数据库的第二个表:附表
class Product extends Model {}
Product.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
title: {
type: DataTypes.STRING,
allowNotNull: false
},
price: DataTypes.DOUBLE,
score: DataTypes.DOUBLE,
brandId: {
field: 'brand_id',
type: DataTypes.INTEGER,
references: {//这张表使用了Brand的id作为外键
model: Brand,//product这张表使用了Brand这个表,所以product必须放在下面
key: 'id'
}
}
}, {
tableName: 'products',
createdAt: false,
updatedAt: false,
sequelize
});
// 将两张表联系在一起
Product.belongsTo(Brand, {
foreignKey: 'brandId'//外键
});
async function queryProducts() {
const result = await Product.findAll({
include: { //这里是联合查询:意思是包含别的表的信息
model: Brand
}
});
console.log(result);
}
queryProducts();
Sequelizeの多対多操作const { Sequelize, DataTypes, Model, Op } = require('sequelize');
const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {
host: 'localhost',
dialect: 'mysql'
});
// Student表
class Student extends Model {}
Student.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNotNull: false
},
age: DataTypes.INTEGER
}, {
tableName: 'students',
createdAt: false,
updatedAt: false,
sequelize
});
// Course表
class Course extends Model {}
Course.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNotNull: false
},
price: DataTypes.DOUBLE
}, {
tableName: 'courses',
createdAt: false,
updatedAt: false,
sequelize
});
// StudentCourse表:关系表
class StudentCourse extends Model {}
StudentCourse.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
studentId: {//与Student表建立关系
type: DataTypes.INTEGER,
references: {
model: Student,
key: 'id'
},
field: 'student_id'
},
courseId: {//与Course表建立关系
type: DataTypes.INTEGER,
references: {
model: Course,
key: 'id'
},
field: 'course_id'
}
}, {
tableName: 'students_select_courses',
createdAt: false,
updatedAt: false,
sequelize
});
// 多对多关系的联系:Student StudentCourse Course
Student.belongsToMany(Course, {
through: StudentCourse,
foreignKey: 'studentId',//这里是Student与StudentCourse,所以外键是studentId
otherKey: 'courseId'//StudentCourse与Course,所以外键是courseId
});
//与上面类似
Course.belongsToMany(Student, {
through: StudentCourse,
foreignKey: 'courseId',
otherKey: 'studentId'
});
async function queryProducts() {
const result = await Student.findAll({
include: {//所有学生的选课情况
model: Course
}
});
console.log(result);
}
queryProducts();
以上がNodejs で koa2 を mysql に接続する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

MySQLクエリのパフォーマンスが低いことの主な理由には、インデックスの使用、クエリオプティマイザーによる誤った実行計画の選択、不合理なテーブルデザイン、過剰なデータボリューム、ロック競争などがあります。 1.インデックスがゆっくりとクエリを引き起こし、インデックスを追加するとパフォーマンスが大幅に向上する可能性があります。 2。説明コマンドを使用してクエリ計画を分析し、オプティマイザーエラーを見つけます。 3.テーブル構造の再構築と結合条件を最適化すると、テーブルの設計上の問題が改善されます。 4.データボリュームが大きい場合、パーティション化とテーブル分割戦略が採用されます。 5.高い並行性環境では、トランザクションの最適化とロック戦略は、ロック競争を減らすことができます。

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
