# (ベータ版)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サーバーよりも高い負荷に対応したサーバーです。
* 管理者がテーブル構造をあらかじめ定義しなくても使用可能です。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.mixeder.net/mixederpublicapis/apirifarensu/sqls2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
