手動查詢 SELECT MAX(id) FROM VisitorLog 計算下一個 ID,資料筆數超過 10 筆後新 ID 停留在 10,不再遞增。
id 欄位型別為 字串 (VARCHAR/CHAR),而非整數。字串排序按 ASCII 碼逐字元比較:
'1' < '2' < ... < '9' < '10' (因 '1' == '1',比較下一字元:無 vs '0' → 視為較小)
結果:MAX('9', '10') = '9'
-- SQL Server
ALTER TABLE VisitorLog ALTER COLUMN id INT IDENTITY(1,1);
-- MySQL
ALTER TABLE VisitorLog MODIFY id INT AUTO_INCREMENT PRIMARY KEY;
插入時不指定 id,資料庫自動分配,SCOPE_IDENTITY() 或 LAST_INSERT_ID() 取得新值。
string sql = "SELECT CAST(MAX(id) AS UNSIGNED) FROM VisitorLog"; // MySQL
// 或 SQL Server: SELECT MAX(CAST(id AS INT)) FROM VisitorLog
// 執行查詢取得 int maxId,新 ID = maxId + 1
但強烈不建議:並發環境下極易產生重複 ID,且效能差。