# (ベータ版)EventFront SQL Speed Storage

## 📘 EventFront SQL Speed Storage 利用ガイド

EventFront SQL Speed Storageを使ってデータベース操作が行える軽量サーバーです。\
ポート `3307` を通じてMySQLクライアントから接続できます。

***

### 🚪 接続情報

* **ホスト**：sql-speed-ja.mixedercloud.com
* **ポート**：3307
* **ユーザー名**：APIキー
* **パスワード**：なし
* **データベース名**：指定不要（無視されます）

***

### ✅ サポートされるSQL文

| 機能    | 文法例                                                      |
| ----- | -------------------------------------------------------- |
| データ取得 | `SELECT * FROM users`                                    |
| 条件検索  | `SELECT * FROM users WHERE age > 20 AND gender = 'male'` |
| 並び替え  | `SELECT * FROM users ORDER BY age DESC`                  |
| 件数制限  | `SELECT * FROM users LIMIT 10 OFFSET 5`                  |
| データ追加 | `INSERT INTO users (name, age) VALUES ('Alice', 22)`     |
| データ更新 | `UPDATE users SET age = 23 WHERE id = 1`                 |
| データ削除 | `DELETE FROM users WHERE id = 1`                         |

***

### ❌ 非対応のSQL機能と代替案

| 機能                    | 状況  | 代替方法・備考                                     |
| --------------------- | --- | ------------------------------------------- |
| `JOIN`                | 非対応 | 各テーブルを個別に読み込んで結合処理はクライアント側で実装               |
| `GROUP BY`            | 非対応 | クライアント側でデータ集計（例：`Array.prototype.reduce()`） |
| `HAVING`              | 非対応 | 同上                                          |
| `LIKE`                | 非対応 | クライアント側で部分一致チェック（`includes`, `match`等）      |
| `IN`, `BETWEEN`       | 非対応 | WHEREを工夫しクライアント側でフィルタリング                    |
| 複数行INSERT             | 非対応 | 1行ずつINSERTを繰り返す                             |
| `CREATE TABLE` 等      | 非対応 | 最初のINSERT時に自動でテーブルが生成されます                   |
| `Prepared Statements` | 非対応 | 入力値の整形・エスケープはクライアント側で実装                     |
| トランザクション              | 非対応 | 同時更新やロールバックはサポートしていません                      |

***

### 🧠 WHERE条件の詳細

* `AND`, `OR` の複雑な組み合わせに対応（※ただし括弧によるグルーピングは非対応）
* 使用可能な比較演算子：
  * `=`, `!=`, `<`, `>`, `<=`, `>=`

```sql
sqlCopyEditSELECT * FROM users WHERE age >= 18 AND gender = 'male' OR name = 'Alice';
```

***

### 🖥 GUIでの接続方法（DBeaver, HeidiSQL, TablePlusなど）

1. **新しい接続を作成**
2. **MySQL** を選択
3. **ホスト**：`localhost`
4. **ポート**：`3307`
5. **ユーザー名**：`root`（任意）
6. **パスワード**：空白でOK
7. データベース名は空でも可。必要に応じて仮の名前を入力

> ✅ 注意：EventFront SQL Speed StorageはSQL互換のチューニングサーバーのため、`SHOW TABLES` や `DESCRIBE` 等のメタ情報取得コマンドは使えません。

***

### 💻 各言語での接続サンプル

#### Node.js（mysql2）

```bash
bashCopyEditnpm install mysql2
```

```js
jsCopyEditconst mysql = require("mysql2/promise");

(async () => {
  const conn = await mysql.createConnection({ host: "localhost", port: 3307, user: "root" });

  const [rows] = await conn.query("SELECT * FROM users WHERE age >= 20 ORDER BY age DESC LIMIT 10");
  console.log(rows);

  await conn.end();
})();
```

***

#### Python（mysql-connector-python）

```bash
bashCopyEditpip install mysql-connector-python
```

```python
pythonCopyEditimport mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    port=3307,
    user="root"
)
cursor = conn.cursor(dictionary=True)

cursor.execute("SELECT * FROM users WHERE age >= 18")
for row in cursor.fetchall():
    print(row)

conn.close()
```

***

#### PHP（PDO）

```php
phpCopyEdit<?php
$pdo = new PDO('mysql:host=127.0.0.1;port=3307;', 'root', '');

$stmt = $pdo->query("SELECT * FROM users WHERE gender = 'female'");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
  echo $row['name'] . "（" . $row['age'] . "歳）<br>";
}
?>
```

***

#### Java（JDBC）

```java
javaCopyEditimport java.sql.*;

public class App {
  public static void main(String[] args) throws Exception {
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/", "root", "");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM users");

    while (rs.next()) {
      System.out.println(rs.getString("name") + " - " + rs.getInt("age"));
    }

    conn.close();
  }
}
```

***

#### C#（.NET + MySql.Data）

```csharp
csharpCopyEditusing MySql.Data.MySqlClient;

var conn = new MySqlConnection("server=localhost;port=3307;user=root;");
conn.Open();

var cmd = new MySqlCommand("SELECT * FROM users", conn);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine($"{reader["name"]} ({reader["age"]})");
}

conn.Close();
```

***

### 💡 ヒント：未対応機能の代替処理

| SQL未対応機能   | 代替手段（クライアント側）                                           |
| ---------- | ------------------------------------------------------- |
| `JOIN`     | 複数回SELECTしてロジックで結合（マッチするIDを手動で照合）                       |
| `GROUP BY` | `Array.reduce()` や `groupby`でクライアント側集計                  |
| `LIKE`     | `includes`, `match`, `RegExp` を用いた文字列部分一致検索             |
| `IN (...)` | `WHERE column = x OR column = y OR ...` または `.filter()` |

***

### 📞 サポート

* 不明点・バグ報告・新機能の要望などは開発者までお問い合わせください。
* EventFront SQL Speed Storageはベータ版のため、高負荷環境や複数同時接続には向きません。

***

### 📦 補足

* 一般的なSQLサーバーよりも高い負荷に対応したサーバーです。
* 管理者がテーブル構造をあらかじめ定義しなくても使用可能です。
