mysql の高度な記事 (2)

序文

ここに画像の説明を挿入
「作者のホームページ」Sprite Youbai Bubbles
「個人サイト」スプライトの個人サイト
「おすすめコラム」

Java ワンストップ サービス
入門から習熟まで対応
クールなフロントエンド コード共有
0 からヒーロー、Vue が神になるまでの道
uniapp-構築からプロモーションまで
0 からヒーロー、 Vueが神になる道
アルゴリズムは1カラムで解ける
0からアーキテクチャを語ろう
データの循環の絶妙なやり方
先進的なバックエンドへの道

画像の説明を追加してください


ここに画像の説明を挿入

MYSQL の基礎 (1)続き

MySQL の高度な操作

トランザクション処理、バックアップとリカバリ、パフォーマンスの最適化など、MySQL の高度な操作を学びます。
以下は、トランザクション処理、バックアップリカバリ、パフォーマンスの最適化などのすべてのコードと概念的な説明を含む、MySQL の高度な操作です。

トランザクション処理

MySQL では、トランザクションは一連のアトミックな SQL 操作であり、一連の操作の実行時にデータベースが完全に完了するか、完全に完了しないかを確認できます。

トランザクションを開始するには、START TRANSACTION ステートメントを使用します。例えば:

START TRANSACTION;

トランザクションをコミットするには、COMMIT ステートメントを使用します。例えば:

COMMIT;

トランザクションを元に戻したい場合は、ROLLBACK ステートメントを使用できます。例えば:

ROLLBACK;

バックアップと復元

MySQL では、mysqldump ツールを使用してデータベースをバックアップおよび復元できます。mysqldump ツールは、データベースのすべてのテーブル、データ、インデックス、その他の情報を含む SQL ファイルを生成できます。

バックアップ

データベースをバックアップするには、次のコマンドを使用できます。

mysqldump -u username -p password database_name > backup.sql

の:

  • username: MySQL にログインするためのユーザー名。
  • パスワード: MySQL にログインするためのパスワード。
  • Database_name: バックアップするデータベースの名前。
  • backup.sql: バックアップ ファイルの保存パスとファイル名。

回復

データベースを復元するには、次のコマンドを使用できます。

mysql -u username -p password database_name < backup.sql

の:

  • username: MySQL にログインするためのユーザー名。
  • パスワード: MySQL にログインするためのパスワード。
  • Database_name: 復元するデータベースの名前。
  • backup.sql: バックアップ ファイルのパスとファイル名。

パフォーマンスの最適化

MySQL では、データベースのパフォーマンスを向上させるために講じられる対策が数多くあります。一般的なパフォーマンスの最適化をいくつか示します。

1. インデックスの最適化

MySQL では、テーブルにインデックスを追加すると、クエリ速度が大幅に向上します。ただし、インデックスが多すぎると書き込み速度が低下するため、実際の状況に応じて最適化する必要があります。

2. クエリの最適化

サブクエリの代わりに JOIN を使用することをお勧めします。JOIN の方が効率的ですが、同時に SELECT * の使用を避け、必要な列のみを選択する必要があります。

3. データベースパラメータのチューニング

MySQL では、一部のデータベース パラメータを変更することでパフォーマンスを向上させることができます。たとえば、キャッシュのサイズを増やしたり、接続数を変更したり、同時スレッドを増やしたりすることができます。

4. パーティションテーブル

大量のデータを扱う場合は、パフォーマンスを最適化するためにパーティション分割テーブルの使用を検討してください。

MySQL開発アプリケーション

PHPやJavaなどのプログラミング言語を使用したデータベースプログラミング、MySQLを使用したWebアプリケーション開発など、MySQLを使用したアプリケーション開発を学びます。
さて、以下は MySQL の開発と応用です。これには、データベース プログラミングに PHP、Java、およびその他のプログラミング言語を使用する方法と、Web アプリケーション開発に MySQL を使用する方法のすべてのコードと詳細な説明が含まれます。

PHPによるデータベースプログラミング

PHP は、MySQL データベースと対話できる人気のあるサーバー側プログラミング言語です。以下は、MySQL に接続してクエリを実行する方法を示す簡単な PHP コード例です。

<?php
$servername = "localhost";
$username = "root";
$password = "";

// 创建连接
$conn = new mysqli($servername, $username, $password);

// 检查连接是否成功
if ($conn->connect_error) {
    
    
    die("连接失败: " . $conn->connect_error);
}

// 执行查询
$sql = "SELECT * FROM mydatabase.customers";
$result = $conn->query($sql);

// 输出查询结果
if ($result->num_rows > 0) {
    
    
    while($row = $result->fetch_assoc()) {
    
    
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    
    
    echo "0 结果";
}

// 关闭连接
$conn->close();
?>

上記の例では、まず mysqli クラスを使用して MySQL 接続を作成し、次にクエリ ステートメントを実行して、結果をブラウザに出力します。最後に、MySQL 接続が閉じられます。

Java を使用したデータベース プログラミング

Java は、MySQL データベースと対話することもできる汎用プログラミング言語です。以下は、MySQL に接続してクエリを実行する方法を示す簡単な Java コード例です。

import java.sql.*;

public class MySQLTest {
    
    
    public static void main(String[] args) {
    
    
        String url = "jdbc:mysql://localhost/mydatabase";
        String username = "root";
        String password = "";

        try {
    
    
            Connection conn = DriverManager.getConnection(url, username, password);

            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM customers");

            while (rs.next()) {
    
    
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String email = rs.getString("email");

                System.out.println("id: " + id + " - Name: " + name + " - Email: " + email);
            }

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
}

上記の例では、まず DriverManager クラスを使用して MySQL 接続を作成し、次にクエリ ステートメントを実行して、結果をコンソールに出力します。最後に、MySQL 接続が閉じられます。

MySQLを使用したWebアプリケーション開発

MySQL は、Laravel、Spring などのさまざまな Web アプリケーション フレームワークと統合できます。Webアプリケーション開発では、MySQLの追加、削除、変更、クエリを行う必要があります。

以下は、Laravel フレームワークを使用して実装された CRUD の例です。

  1. Laravel で Customer というモデルを作成します。
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    
    
    protected $fillable = ['name', 'email'];
}
  1. Laravel で CustomerController というコントローラーを作成します。
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Customer;

class CustomerController extends Controller
{
    
    
    public function index()
    {
    
    
        $customers = Customer::all();
        return view('customer.index', ['customers' => $customers]);
    }
    
    public function create()
    {
    
    
        return view('customer.create');
    }
    
    public function store(Request $request)
    {
    
    
        $customer = Customer::create([
            'name' => $request->input('name'),
            'email' => $request->input('email')
        ]);
        
        return redirect('/customers');
    }
    
    public function edit($id)
    {
    
    
        $customer = Customer::find($id);
        return view('customer.edit', ['customer' => $customer]);
    }
    
    public function update(Request $request, $id)
    {
    
    
        $customer = Customer::find($id);
        $customer->name = $request->input('name');
        $customer->email = $request->input('email');

        $customer->save();
        
        return redirect('/customers');
    }
    
    public function destroy($id)
    {
    
    
        $customer = Customer::find($id);
        $customer->delete();
        
        return redirect('/customers');
    }
}

上記の例では、CustomerController コントローラーは、Customer モデルのクエリ、追加、編集、更新、削除に対応する、インデックス、作成、保存、編集、更新、および破棄の 6 つのアクションを提供します。

  1. Laravel で対応するルートを作成します。
Route::get('/customers', 'CustomerController@index')->name('customer.index');
Route::get('/customers/create', 'CustomerController@create')->name('customer.create');
Route::post('/customers', 'CustomerController@store')->name('customer.store');
Route::get('/customers/{id}/edit', 'CustomerController@edit')->name('customer.edit');
Route::put('/customers/{id}', 'CustomerController@update')->name('customer.update');
Route::delete('/customers/{id}', 'CustomerController@destroy')->name('customer.destroy');

上記の例では、上記の 6 つのアクションに対応して 6 つのルートが定義されています。

  1. Laravel で対応するビュー テンプレートを作成します。
  • インデックス.ブレード.php
@extends('layout')

@section('content')
    <h1>Customers</h1>
    
    <a href="{
     
     { route('customer.create') }}" class="btn btn-primary">Add New Customer</a>
    
    <table class="table">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($customers as $customer)
                <tr>
                    <td>{
   
   { $customer->id }}</td>
                    <td>{
   
   { $customer->name }}</td>
                    <td>{
   
   { $customer->email }}</td>
                    <td>
                        <a href="{
     
     { route('customer.edit', ['id' => $customer->id]) }}" class="btn btn-primary">Edit</a>
                        <form action="{
     
     { route('customer.destroy', ['id' => $customer->id]) }}" method="POST" style="display: inline">
                            {
   
   { method_field('DELETE') }}
                            {
   
   { csrf_field() }}
                            <button type="submit" class="btn btn-danger">Delete</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
@endsection
  • 作成.ブレード.php
@extends('layout')

@section('content')
    <h1>Add New Customer</h1>
    
    <form action="{
     
     { route('customer.store') }}" method="POST">
        {
   
   { csrf_field() }}
        <div class="form-group">
            <label for="name">Name:</label>
            <input type="text" name="name" id="name" class="form-control">
        </div>
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" name="email" id="email" class="form-control">
        </div>
        <button type="submit" class="btn btn-primary">Create</button>
    </form>
@endsection
  • edit.blade.php
@extends('layout')

@section('content')
    <h1>Edit Customer</h1>
    
    <form action="{
     
     { route('customer.update', ['id' => $customer->id]) }}" method="POST">
        {
   
   { method_field('PUT') }}
        {
   
   { csrf_field() }}
        <div class="form-group">
            <label for="name">Name:</label>
            <input type="text" name="name" id="name" class="form-control" value="{
     
     { $customer->name }}">
        </div>
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" name="email" id="email" class="form-control" value="{
     
     { $customer->email }}">
        </div>
        <button type="submit" class="btn btn-primary">Update</button>
    </form>
@endsection

上記の例では、顧客リストの表示、顧客の追加、顧客の編集にそれぞれ対応する 3 つのビュー テンプレートが定義されています。

上記は、MySQL を使用してアプリケーションを開発する例であり、データベース プログラミングに PHP、Java などのプログラミング言語を使用したり、Web アプリケーション開発に MySQL を使用したりするすべてのコードと詳細な説明が含まれています。

データベース管理

データのバックアップ、リカバリ、パフォーマンス監視、セキュリティ管理などのデータベース管理を実行する方法を学びます。
データベース管理とは、データのバックアップ、リカバリ、パフォーマンス監視、セキュリティ管理など、データベースの維持管理を指します。以下に、これらの側面の概念と関連するコードの詳細を紹介します。

1. データのバックアップ

データ バックアップとは、元のデータが破損した場合に復元できるように、データベース内のデータを 1 つ以上の場所にコピーすることを指します。一般的なバックアップ方法には、完全バックアップ、増分バックアップ、差分バックアップなどがあります。

完全バックアップは、データベース全体を別の場所にバックアップすることです。増分バックアップでは、最後の完全バックアップ以降に新規または変更されたデータのみがバックアップされます。差分バックアップでは、最後の完全バックアップ以降に変更されたデータがバックアップされます。

SQL Server データベースのバックアップ コードは次のとおりです。

-- 完全备份
BACKUP DATABASE MyDatabase
TO DISK = 'C:\MyDatabase.bak'
WITH INIT;

-- 增量备份
BACKUP DATABASE MyDatabase
TO DISK = 'C:\MyDatabase_incremental.bak'
WITH DIFFERENTIAL;
 
-- 差异备份
BACKUP DATABASE MyDatabase
TO DISK = 'C:\MyDatabase_differential.bak'
WITH DIFFERENTIAL;

2. データ復旧

データ回復とは、破損したデータを回復するために、バックアップ ファイルからデータベースにデータを復元することを指します。

SQL Server データベースのリカバリ コードは次のとおりです。

-- 恢复完全备份
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\MyDatabase.bak';

-- 恢复增量备份
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\MyDatabase_incremental.bak'
WITH NORECOVERY;
 
-- 恢复差异备份
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\MyDatabase_differential.bak'
WITH NORECOVERY;

3. パフォーマンスの監視

パフォーマンス監視とは、データベースを監視および分析することによって、システムのパフォーマンスを評価し、潜在的な問題を発見することを指します。

以下は、SQL Server データベースのパフォーマンス監視コードです。

-- 查看当前运行的所有进程
SELECT * FROM sys.sysprocesses;

-- 查看缓存中的查询计划
SELECT * FROM sys.dm_exec_cached_plans;

-- 查看缓存中的查询
SELECT text FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE execution_count > 1;

4. 安全管理

セキュリティ管理とは、不正なアクセスや悪意のある攻撃からデータベースを保護することを指します。一般的なセキュリティ管理手段には、ユーザー、ロール、権限の作成が含まれます。

SQL Server データベースのセキュリティ管理コードは次のとおりです。

-- 创建用户并授予数据库访问权限
CREATE LOGIN NewUser WITH PASSWORD = 'password';
CREATE USER NewUser FOR LOGIN NewUser;
USE MyDatabase;
GRANT SELECT, INSERT, UPDATE, DELETE TO NewUser;

-- 创建角色并向其中添加用户
CREATE ROLE MyRole;
EXEC sp_addrolemember 'MyRole', 'NewUser';

-- 授予对象级别的权限给角色
GRANT SELECT, INSERT, UPDATE, DELETE ON MyTable TO MyRole;

おすすめ

転載: blog.csdn.net/Why_does_it_work/article/details/132177925