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

SQL 資料操作語句 (DML) 基礎與 Android SQLite 實作對照

     編輯:關於SqlServer

一、SQL 運算子速查

類別運算子說明
算術+加法
-減法
*乘法
/除法
%取模 (餘數)
賦值=標量賦值 (SET @x = 1)
比較=等於
>大於
<小於
<> / !=不等於
>=大於等於
<=小於等於
邏輯AND全真才真
OR一真即真
NOT取反 (最高優先級)

二、T-SQL DML 基礎操作 (SQL Server)

2.1 切換資料庫

USE MySchool;

2.2 查詢

SELECT * FROM Student;

2.3 新增 (INSERT)

-- 全欄位 (含身分欄需排除)
INSERT INTO Student (StudentNo, LoginPwd, StudentName, Gender, GradeId, Phone, Address, Birthday, Email)
VALUES (23214, '5634', N'淚灑星辰', 0, 2, '5434', N'北京市', '2015-10-31 09:29:59', 'lsfjkl');

-- 部分欄位 (其餘需允許 NULL 或有 DEFAULT)
INSERT INTO Student (StudentName, Gender) VALUES (N'新生', 1);

-- 使用 DEFAULT 關鍵字
INSERT INTO Student (StudentName, Gender, GradeId) VALUES (N'預設年級', 1, DEFAULT);

2.4 批次新增三種方式

  1. SELECT * INTO StudentBak FROM Student — 建新表並複製 (不可指定目標表)。
  2. INSERT INTO Student SELECT * FROM StudentBak — 追加到現有表 (需欄位相容,身分欄需列出明確欄位)。
  3. INSERT INTO Student (StudentName, Gender) VALUES (N'A',0), (N'B',1), (N'C',0); — 多值列 (SQL 2008+)。

2.5 修改 (UPDATE)

UPDATE Student 
SET StudentNo = 1, StudentName = N'淚灑星辰'
WHERE ID = '192ABC';  -- 必須加 WHERE,否則全表更新

注意:WHERE ID = NULL 永遠為 UNKNOWN,需用 WHERE ID IS NULL。

2.6 刪除 (DELETE vs TRUNCATE)

DELETE FROM Student WHERE ID = '192ABC';  -- 記錄逐列日誌、觸發 Trigger、身分值不重置
TRUNCATE TABLE Student;                    -- 最小記錄、不觸發 Trigger、身分值重置、不可有 FK 參考

三、Android SQLite 實作對照

Android 使用 android.database.sqlite.SQLiteDatabase,核心方法:

3.1 取得資料庫實例

SQLiteOpenHelper helper = new MyDbHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();  // 讀寫
// SQLiteDatabase db = helper.getReadableDatabase(); // 唯讀

3.2 新增

db.execSQL("INSERT INTO person (name, number) VALUES (?, ?)", new Object[]{name, number});

3.3 刪除

db.execSQL("DELETE FROM person WHERE name = ?", new Object[]{name});

3.4 修改

db.execSQL("UPDATE person SET number = ? WHERE name = ?", new Object[]{newNumber, name});

3.5 查詢

Cursor cursor = db.rawQuery("SELECT * FROM person WHERE name = ?", new String[]{name});
boolean hasResult = cursor.moveToNext();
if (hasResult) {
  String name = cursor.getString(cursor.getColumnIndex("name"));
  int number = cursor.getInt(cursor.getColumnIndex("number"));
}
cursor.close();
db.close();

3.6 參數化查詢優勢

  • 防止 SQL 注入
  • 避免字串拼接格式錯誤 (引號、日期格式)
  • 執行計畫快取重用 (SQLite 亦有簡易快取)

四、跨平台差異提醒

特性SQL Server (T-SQL)Android SQLite
自動遞增IDENTITY(1,1)INTEGER PRIMARY KEY AUTOINCREMENT
日期時間DATETIME, DATETIME2TEXT (ISO8601) / INTEGER (Unix epoch)
字串連接+||
TOP/LIMITTOP (10) / OFFSET/FETCHLIMIT 10
ISNULL/COALESCE支援IFNULL() / COALESCE()

結語

DML 核心 (SELECT/INSERT/UPDATE/DELETE) 跨平台一致,差異在 DDL 型別、函數、分頁語法。Android 開發務必使用參數化 execSQL/rawQuery,切勿字串拼接。資料庫輔助類 (SQLiteOpenHelper) 負責版本升級腳本 (onUpgrade),保持結構演進可控。

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