# 建構器狀態

本頁說明查詢建構器的狀態存放在哪裡，以及這對呼叫方式有什麼限制。

## 狀態存放在 static 欄位

`MySQLPool` 沒有實例：`table()`、`where()` 等方法修改的是類別上的 static 欄位，並回傳類別本身（`typeof MySQLPool`）以便串接（`src/MySQLPool.ts:20-30`）。

| 欄位 | 由誰寫入 |
|---|---|
| `tableName`、`currentTarget` | `table()` |
| `selectAry` | `select()` |
| `joinAry` | `innerJoin()`、`leftJoin()`、`rightJoin()` |
| `whereAry`、`bindingAry` | `where()` |
| `orderAry` | `orderBy()` |
| `queryLimit`、`queryOffset` | `limit()`、`offset()` |
| `withTotal` | `total()` |
| `setAry` | `increase()`、`update()` |

## 每條鏈都從 `table()` 開始

只有 `table()` 會呼叫 `reset()` 清空上述欄位（`src/MySQLPool.ts:117-137`）。執行 `get()`／`update()` 等方法後狀態**不會**被清空，因此：

```typescript
await MySQLPool.table("users").where("id", 1).get();

// 錯誤：沿用上一條鏈的 tableName 與 WHERE，等同再查一次 id = 1
await MySQLPool.where("status", "active").get();

// 正確
await MySQLPool.table("users").where("status", "active").get();
```

`currentTarget` 也會殘留：在 `table("x", "write")` 之後直接呼叫 `query(sql)` 而不帶 `target`，會走寫入池。

## 相關頁面

- [API 參考](/zh/api-reference)
