首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 開發 6 大實用技巧:命令結束符、關聯數組、數據類型、緩存、通配符、空值處理

     編輯:MySQL 綜合教學

MySQL 開發 6 大實用技巧:命令結束符、關聯數組、數據類型、緩存、通配符、空值處理

從 PHP 交互、數據類型選型、查詢優化到空值語義,6 個實戰技巧助你寫出更健壯、高效的 MySQL 應用代碼。

技巧 1:命令結束符 —— PHP 中省略分號

MySQL 原生客戶端以 ; 結束語句,但 PHP 腳本中 mysql_query() / PDO::exec() 已封裝發送,**SQL 字符串末尾不需分號**,加反而可能導致 PHP 解析器誤判。

// 推薦
mysql_query("INSERT INTO t (a,b) VALUES ('$a','$b')");
// 不推薦
mysql_query("INSERT INTO t (a,b) VALUES ('$a','$b');");

技巧 2:關聯數組訪問查詢結果 —— 可讀性優先

$result = mysql_query("SELECT cust_id, surname, firstname FROM customer");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {  // 關聯數組
    echo "ID: {$row['cust_id']}\n";
    echo "姓: {$row['surname']}\n";
    echo "名: {$row['firstname']}\n\n";
}
  • MYSQL_ASSOC / PDO::FETCH_ASSOC:鍵為列名,$row['cust_id'] 遠優於 $row[0]。
  • 多表 JOIN 同名列用別名:SELECT w.name AS wname, r.name AS rname ... → $row['wname']。
  • 聚合函數列名含括號:$row['COUNT(*)']。

技巧 3:TEXT、DATE、SET 數據類型避坑

  • TEXT 非類型名:實際是 LONG VARCHAR / MEDIUMTEXT 等具體類型,建表時顯式指定長度層級。
  • DATE 格式固定:YYYY-MM-DD,PHP date('Y-m-d') 生成。日期間可直接相減得天數:$age = $current_date - $birthdate;(MySQL 隱式轉換)。
  • SET vs ENUM:SET 可存多值(位掩碼),最多 64 個預定義值;ENUM 單值,最多 65535 個。超過 64 個多選需拆多列 SET 或關聯表。

技巧 4:mysql_unbuffered_query() —— 大結果集流式處理

$res = mysql_unbuffered_query("SELECT * FROM huge_table");
// 立即返回,不等待全部結果集緩存到 PHP 內存
// 不能用 mysql_num_rows(),因總行數未知
while ($row = mysql_fetch_assoc($res)) {
    // 逐行處理,內存常數級
}

適用:百萬級導出、ETL、報表生成。慎用於事務中(未讀完結果集前連接被佔用)。

技巧 5:通配符 —— * 與 % 分工明確

通配符匹配對象配合關鍵字示例
*列名(投影)無SELECT * FROM t
%列值(過濾)LIKEWHERE name LIKE 'Zhang%'
_單個字符(值)LIKEWHERE code LIKE '_A__'

% 必須與 LIKE 搭配,單獨使用無效。

技巧 6:NOT NULL 與空值語義陷阱

  • 未聲明 NOT NULL:插入空值 → 存 NULL。
  • 聲明 NOT NULL:插入空值 → 報錯(嚴格模式)或存默認值(非嚴格模式:數值 0、字符串 ''、ENUM 首值)。
  • NULL ≠ 空字符串:WHERE col LIKE '%' 匹配 '',不匹配 NULL。WHERE col IS NULL 才匹配 NULL。
  • 建議:所有業務列默認 NOT NULL + 顯式 DEFAULT,消除三值邏輯困擾,查詢條件簡單直接。
  • ALTER TABLE 新增列:舊行新列值可能為 NULL 或 '',視版本/存儲引擎而定,查詢時需同時判斷 IS NULL OR = ''。

細節決定質量。這 6 個技巧看似微小,貫穿開發全鏈路,養成習慣,少踩無數坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved