データベースの概要/個人の概要

データベース

その名の通りセーブデータ

データと情報

データ データ

  • 物事を説明する言葉や記号はすべてデータと呼ぶことができます。
  • ソフトウェア開発とは、データを収集し、そこから有益な情報を選別することです。
  • 情報とは、分析およびフィルタリングされたデータです。
  • データは保存する必要があり、記憶媒体にはメモリまたはハードディスクが含まれます。
  • メモリ内のデータは一時的なものであり、システムがシャットダウンされると消えます。
  • ハードディスク内のデータは永続的で、システムがシャットダウンされてもデータは保持されます。
  • データをエクセルなどのファイルに保存することは、ハードディスクに保存する方法です。
  • 大量のデータ ストレージが必要な場合、ファイル システムはもはや便利ではありません。
  • 体系的なデータ ウェアハウスを使用して、データを効率的に管理します。

データベース

  • データベース、または略して DB と呼ばれる DataBase は、オペレーティング システム上で実行され、特定のデータ構造に従ってデータを格納します。電子ファイリングキャビネットです。
  • データはハードディスクに永続的に保存されます。

データベースマネージメントシステム

  • DBMS と略されるデータベースマネージャーシステムは、
    通常データベースと呼ばれますが、実際には MySQL、SQLServer、Oracle などのデータベース管理システムを指します。
  • データベースを構築・利用・維持するための大規模なデータベース運用・管理ソフトウェアです。

要約する

データ データはデータベースに永続的に保存する必要がある.
学生 ID (フィールド) 名前 (フィールド) 専攻 (フィールド)
1001 Xiao Wang コンピュータ
1002 Xiao Li コンピュータ
1003 Xiao Zhao コンピュータ
データベース DB は、オペレーティング システム
DBMS上で実行されるソフトウェア データベース管理システムです。は管理データベースです
データベースを学習するためのソフトウェアは、 DBMS を使用してデータ ウェアハウスを作成し、データを管理する方法を学習することです。

一般的なデータベース管理システム

リレーショナル データベース

  • リレーショナル データベースは、主流のデータベース タイプです。
  • データは行と列 (テーブル) の形式で保存されます。

各行はレコードと呼ばれます。
各列はフィールドと呼ばれます。

接続クエリ

交差結合、デカルト積

2 つのテーブルのデータを結合した結果は、相互接続の結果であり、直交積とも呼ばれます。

セット A: {a,b}

セット B: {1,2,3}

セット A x セット B = {a1,a2,a3,b1,b2,b3}

select * from1,2;
select * from1 cross join2;  
select * from1 inner join2;

上記の 3 つの方法は、2 つのテーブルのデータを互いに組み合わせることができますが、その中には多くの無効なデータがあります。

内部結合

相互接続に基づいて、関連するデータが除外されます。

select * from1,2 where1.字段 =2.字段;
select * from1 inner join2 on1.字段 =2.字段;

-- 如查询所有图书详情和类型名
select * from 图书详情表 t1,图书类型表 t2 where t1.类型编号 = t2.类型编号;

select * from 图书详情表 t1 inner join 图书类型表 t2 on t1.类型编号 = t2.类型编号;
  • 通常、セカンダリ テーブルの外部キー フィールドは、メイン テーブルの主キー フィールドに関連付けられます。
  • 2 つのテーブルの関連付けられたフィールド名が同じ場合は、「テーブル名.フィールド名」で区別する必要があり、通常はテーブルの名前が変更されます。
  • 内部結合を使用する場合は、条件がある場合は where 句を追加する必要があります。使用する場合は、複数のテーブルを分離し、条件がある場合は条件を使用して結合する必要があります。
  • 内部結合は、2 つのテーブルに関連付けられたデータのみを表示します。

左結合

-- 保证左表数据显示完整的情况下,关联右表中的数据,没有关联的用null表示
select * from1 left join2 on1.字段 =2.字段
-- 最终显示表1中的所有数据,关联表2中的数据

右結合

-- 保证右表数据显示完整的情况下,关联左表中的数据,没有关联的用null表示
select * from1 right join2 on1.字段 =2.字段
-- 最终显示表2中的所有数据,关联表1中的数据

ネストされたクエリ

クエリ結果を別のクエリ ステートメントで引き続き使用する

-- 查询价格最低的图书信息
select * from book_info where book_price = (select min(book_price) from book_info)
-- 按类型分组,查询每组中图书价格大于平均价格的图书
select * from book_info bi inner join 
(select type_id,avg(book_price) as avg from book_info group by type_id)temp
on bi.type_id = temp.type_id  where book_price > avg

ジャー

.jar サフィックスが付いたファイルは、Java アーカイブと呼ばれます。Java バイトコード .class ファイルが保存されます

.jar ファイルを Java プログラムにインポートした後、その中の .class ファイルを使用できます。

Java プロジェクトでの .jar ファイルの使用

1. Java プロジェクトを作成します。このプロジェクトでは、新しいフォルダーを作成して .jar ファイルをそこに保存するのが最適です。

2. .jar ファイルを右クリックし、[ライブラリとして追加] をクリックします。

JDBC

Javaデータベース接続Javaデータベース接続_ _

Java プログラムが異なるデータベースに接続するために使用されます。

実際には、Java で定義された、さまざまなデータベースによって実装されている関連データベースへの接続に必要なインターフェイスの集まりです。

コア インターフェイス

  • 接続: 接続されたデータベースのアドレス、アカウント番号、およびパスワードを設定するために使用されます

  • PreparedStatement : SQL ステートメントの前処理と実行に使用されます

  • **ResultSet: ** クエリ データを保存するために使用されます

上記のインターフェースはすべて java.sql パッケージのものです

単一テーブル クエリ

import java.sql.*;

public class Main {
    
    
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
    
    
        //连接mysql数据库实现单表查询
        //1.加载连接MySQL的驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.连接数据库,提供要连接的数据库的URL、用户名、密码
        String url = "jdbc:mysql://localhost:3306/gamedb?serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, "root", "root");
        //3.构造查询的sql语句
        String sql = "select * from hero";
        //4.处理sql语句
        PreparedStatement pst = conn.prepareStatement(sql);
        //5.处理执行sql语句后的结果
        ResultSet rs = pst.executeQuery();
        //6.循环遍历读取查询后的数据
        while (rs.next()) {
    
    
            //根据字段名获取
            int id = rs.getInt("id");
            //根据字段顺序获取
            String name = rs.getString(2);
            String sex = rs.getString(3);
            int price = rs.getInt(4);
            String makeTime = rs.getString(5);
            String position = rs.getString(6);
            System.out.println(id+"\t"+name+"\t"+sex+"\t"+price+"\t"+makeTime+"\t"+position);
        }
        //7.关闭连接
        rs.close();
        pst.close();
        conn.close();
    }
}

SQL インジェクション

SQL ステートメントを構築する際、文字列連結を使用して可変 SQL ステートメントを構築すると、SQL インジェクションのリスクが発生し、予期しない SQL ステートメントが実行される可能性があります。

-- 如删除的sql String sql="delete from 表 where 主键="+参数;
-- 实际传递 '' or 1=1
delete fromwhere 主键= '' or 1=1
-- 导致条件永远成立,最终删除了所有数据

-- 查询的sql  String sql="select * from 表 where name="+name +"and pwd="+pwd;
-- 实际第一个参数传递 '' or 1=1 -- 
select * fromwhere name = '' or 1=1 -- pwd=
-- 导致第二个参数被注释,第一个参数永远成立

SQL ステートメントを作成するときは、プレースホルダーを使用して、preparestatement メソッドによる SQL インジェクションのリスクを防ぎます。

JDBC の簡素化

DBUtil データベース ツール クラス

import java.sql.*;

/*
 * 定义数据库工具类,简化JDBC操作
 * 可以简化的操作
 * 1.加载驱动   √
 * 2.连接数据库 √
 * 6.关闭   √
 * */
public class DBUtil {
    
    
    /*
     * 定义静态代码块用于加载驱动
     * */
    static {
    
    
        try {
    
    
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
    
    
            System.out.println("驱动不存在" + e);
        }
    }

    //定义静态常量保存连接数据库的字符串
    private final static String URL = "jdbc:mysql://localhost:3306/gamedb?serverTimezone=Asia/Shanghai";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "root";

    /*
     * 定义静态方法获取连接对象
     * */
    public static Connection getConn() {
    
    
        Connection connection = null;
        try {
    
    
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException e) {
    
    
            System.out.println("连接数据库信息异常" + e);
        }
        return connection;
    }

    /*
     * 定义静态方法释放资源
     * */
    public static void release(Connection conn, PreparedStatement pst, ResultSet rs) {
    
    
        //使用了哪个接口就关闭那个接口
        try {
    
    
            if (rs != null) {
    
    
                rs.close();
            }
            if (pst != null) {
    
    
                pst.close();
            }
            if (conn != null) {
    
    
                conn.close();
            }
        } catch (SQLException e) {
    
    
            System.out.println("关闭异常" + e);
        }
    }
}

ビュービュー

ビューをデータベースの一時テーブルとして使用して、より複雑なクエリの結果を保存できます。
その後、複雑な SQL ステートメントを再度記述することなく、このビューを介してデータを直接クエリできます。
ビューでは、一部のクエリの詳細を非表示にしたり、クエリ データをカスタマイズしたりすることもできます。

ビューを作成

create view 视图名 as
查询的sql语句;

ビューを使用

ビューのデータを変更すると、元のテーブルのデータが直接変更されます。

select * from 视图名;

ビューを削除

drop view 视图名;

取引

トランザクションは一連の SQL ステートメントで構成される実行単位であり、これらの SQL ステートメントは通常、相互に依存しています。
たとえば、A は B に送金します。
1. update table set money = money-1000 where id=1
2. update table set money = money+1000 where id=2
上記の 2 つの SQL 文は、送金トランザクションを構成します。トランザクションは、まったく実行されるか、まったく実行されないかのいずれかです。

トランザクションの特徴 ACID

原子性

トランザクションは最小の実行単位であり、すべてが実行されるか、いずれも実行されません。

一貫性 一貫性

トランザクション実行の前後で、すべてのデータが一貫した状態に保たれている必要があります。(全体的なデータ保存)
create view name as
query sql statement;
select * from view name;
drop view view name;

アイソレーション アイソレーション

複数のトランザクションが同時に実行される場合、それらは互いに分離され、互いに影響を与えないようにする必要があります。

耐久性持続性

トランザクションがコミットされると、データへの変更は永続的になります。

ストレージエンジン

  • MySQL 5.5 より前は、MyIsam ストレージ エンジンがデフォルトで使用され、トランザクションはサポートされていませんでした。
  • MySQL5.5 以降では、InnoDB ストレージ エンジンがデフォルトでトランザクションをサポートするために使用されます。

おすすめ

転載: blog.csdn.net/qq_53431712/article/details/129839107