サンプル集  >  other  >  MySQLでテーブル作成、データ追加、検索
MySQLでテーブル作成、データ追加、検索
2025/09/14

mysqlクレートを使ってMySQLでテーブル作成、データ追加、検索をしてみます。

◆環境
OS Windows 10 Home 22H2 64bit
rustc 1.86.0
cargo 1.86.0

Cargo.tomlファイルに依存関係を追記します。

Cargo.toml
1: 
2: 
3: 
4: 
5: 
6: 
7: 
[package]
name = "ymwrust011"
version = "0.1.0"
edition = "2024"

[dependencies]
mysql = "26.0.1"

MySQLへ接続しテーブルを作成しデータを追加し検索するようにします。

main.rs
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
use mysql::{prelude::Queryable, Conn, Opts};

fn main() -> mysql::Result<()> {
    println!("Hello, world!");
    let url="mysql://root:root@localhost:3306/MyDB";
    let opts = Opts::from_url(url).unwrap();

    let mut conn = Conn::new(opts).unwrap();

    conn.query_drop(
        "CREATE TABLE IF NOT EXISTS rec_values (
            id INT PRIMARY KEY AUTO_INCREMENT,
            rec_date
              DATETIME NOT NULL
              DEFAULT CURRENT_TIMESTAMP
                   ON UPDATE CURRENT_TIMESTAMP,
            rec_value DECIMAL(3, 1) 
        )",
    )?;

    conn.exec_drop(
        "INSERT INTO rec_values (rec_value) VALUES (?)",
        (12.3,),
    )?;

    let selected: Vec<String>
        = conn.query_map("SELECT rec_value FROM rec_values"
                        , |rec_value: String| rec_value
                        )?;

    println!("rec_values: {:?}", selected);

    Ok(())
}

cargo runで実行したところ正常に動作したようです。

cargo run
   Compiling ymwrust011 v0.1.0 (C:\rust-workspace\ymwrust011)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.8
9s
     Running `target\debug\ymwrust011.exe`
Hello, world!
rec_values: ["12.3"]

MySQLへ接続し状況を確認したところテーブルが作成されていました。

mysql> show tables;
+----------------+
| Tables_in_MyDB |
+----------------+
| rec_values     |
+----------------+
1 row in set (0.00 sec)

テーブルの構成を確認したところ期待通りの構成になっていました。

mysql> desc rec_values;
+-----------+--------------+------+-----+-------------------+--------
---------------------------------------+
| Field     | Type         | Null | Key | Default           | Extra  
                                       |
+-----------+--------------+------+-----+-------------------+--------
---------------------------------------+
| id        | int          | NO   | PRI | NULL              | auto_in
crement                                |
| rec_date  | datetime     | NO   |     | CURRENT_TIMESTAMP | DEFAULT
_GENERATED on update CURRENT_TIMESTAMP |
| rec_value | decimal(3,1) | YES  |     | NULL              |        
                                       |
+-----------+--------------+------+-----+-------------------+--------
---------------------------------------+
3 rows in set (0.02 sec)

レコードを確認したところ期待通りのデータが追加されていました。

mysql> select * from rec_values;
+----+---------------------+-----------+
| id | rec_date            | rec_value |
+----+---------------------+-----------+
|  1 | 2025-09-14 10:28:12 |      12.3 |
+----+---------------------+-----------+
1 rows in set (0.00 sec)

もう一度実行してみたところ正常に終わり取得結果も2件表示されました。

cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.1
5s
     Running `target\debug\ymwrust011.exe`
Hello, world!
rec_values: ["12.3", "12.3"]

DBを確認したところデータも2件になっていました。

mysql> select * from rec_values;
+----+---------------------+-----------+
| id | rec_date            | rec_value |
+----+---------------------+-----------+
|  1 | 2025-09-14 10:28:12 |      12.3 |
|  2 | 2025-09-14 10:28:15 |      12.3 |
+----+---------------------+-----------+
2 rows in set (0.00 sec)

期待通りに動作しました!

▲ PageTop  ■ Home


Copyright (C) 2025 ymlib.com