mysql 고급 기사 (2)

머리말

여기에 이미지 설명 삽입
"저자 홈페이지" : Sprite Youbai Bubbles
"개인 홈페이지" : Sprite 개인 홈페이지
"추천 칼럼" :

Java 원스톱 서비스
입문에서 숙달로 반응
멋진 프런트엔드 코드 공유
0에서 영웅으로, Vue가 신이 되는 길
uniapp-구축에서 승진까지
0에서 영웅으로, Vue가 신이 되어가는 길
하나의 컬럼으로 알고리즘을 풀 수 있다
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을 사용한 웹 애플리케이션 개발을 포함하여 MySQL을 사용하여 애플리케이션을 개발하는 방법을 배웁니다.
자, 다음은 데이터베이스 프로그래밍을 위해 PHP, Java 및 기타 프로그래밍 언어를 사용하고 웹 애플리케이션 개발을 위해 MySQL을 사용하는 모든 코드와 자세한 설명을 포함하여 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을 사용한 웹 애플리케이션 개발

MySQL은 Laravel, Spring 등과 같은 다양한 웹 애플리케이션 프레임워크와 통합될 수 있습니다. 웹 애플리케이션 개발에서는 MySQL을 추가, 삭제, 수정 및 쿼리해야 합니다.

다음은 Laravel 프레임워크를 사용하여 구현된 CRUD의 예입니다.

  1. Laravel에서 Customer라는 모델을 생성합니다.
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    
    
    protected $fillable = ['name', 'email'];
}
  1. 라라벨에서 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 컨트롤러는 쿼리, 추가, 편집, 업데이트 및 고객 모델 삭제에 해당하는 여섯 가지 작업인 인덱스, 생성, 저장, 편집, 업데이트 및 삭제를 제공합니다.

  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에서 해당 뷰 템플릿을 생성합니다.
  • index.blade.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
  • create.blade.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

위의 예에서는 각각 고객 목록 표시, 고객 추가 및 고객 편집에 해당하는 세 개의 보기 템플릿이 정의되어 있습니다.

위는 데이터베이스 프로그래밍을 위해 PHP, Java 및 기타 프로그래밍 언어를 사용하고 웹 응용 프로그램 개발을 위해 MySQL을 사용하는 방법에 대한 모든 코드와 자세한 설명을 포함하여 MySQL을 사용하여 응용 프로그램을 개발하는 예입니다.

데이터베이스 관리

데이터 백업, 복구, 성능 모니터링, 보안 관리 등 데이터베이스를 관리하는 방법을 배웁니다.
데이터베이스 관리는 데이터 백업, 복구, 성능 모니터링, 보안 관리 등 데이터베이스의 유지 관리를 말합니다. 아래에서는 이러한 측면의 개념과 관련 코드 세부 정보를 소개합니다.

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