# SQLite的INSERT INTO語句怎么使用
## 1. 概述
SQLite是一種輕量級的嵌入式關系型數據庫管理系統,廣泛應用于移動設備、桌面應用和小型Web應用中。`INSERT INTO`語句是SQLite中最基礎且重要的操作之一,用于向數據庫表中添加新記錄。
本文將全面介紹SQLite中`INSERT INTO`語句的使用方法,包括基本語法、多種插入方式、常見問題及優化建議。
## 2. 基本語法
### 2.1 最簡單的INSERT語句
```sql
INSERT INTO table_name VALUES (value1, value2, value3,...);
示例:
-- 向students表插入一條完整記錄
INSERT INTO students VALUES (1, '張三', 20, '計算機科學');
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...);
示例:
-- 只插入部分字段
INSERT INTO students (id, name, age) VALUES (2, '李四', 21);
這是最基本的插入方式,每次插入一條記錄:
INSERT INTO employees (emp_id, name, department)
VALUES (101, '王五', '人力資源');
SQLite支持一次插入多條記錄:
INSERT INTO products (id, name, price) VALUES
(1, '筆記本電腦', 5999),
(2, '智能手機', 3999),
(3, '平板電腦', 2999);
可以從其他表查詢數據并插入:
INSERT INTO archive_students
SELECT * FROM students
WHERE graduation_year = 2023;
當某些列設置了默認值時:
-- 方式1:使用DEFAULT關鍵字
INSERT INTO orders (order_id, product_id, quantity)
VALUES (1001, 305, DEFAULT);
-- 方式2:省略列名
INSERT INTO orders DEFAULT VALUES;
大量數據插入時建議使用事務:
BEGIN TRANSACTION;
INSERT INTO log_entries (timestamp, message) VALUES ('2023-01-01 08:00', '系統啟動');
INSERT INTO log_entries (timestamp, message) VALUES ('2023-01-01 08:05', '加載配置');
-- 更多插入語句...
COMMIT;
SQLite支持特殊的沖突解決語法:
-- 如果主鍵沖突則替換原有記錄
INSERT OR REPLACE INTO users (id, name, email)
VALUES (1, '趙六', 'zhao@example.com');
-- 如果沖突則忽略本次插入
INSERT OR IGNORE INTO departments (dept_id, name)
VALUES (10, '研發部');
雖然這不是純SQL操作,但常與INSERT結合使用:
-- 先創建臨時表
CREATE TEMP TABLE temp_import(
id INTEGER,
name TEXT,
value REAL
);
-- 導入CSV數據
.mode csv
.import data.csv temp_import
-- 插入到正式表
INSERT INTO main_table SELECT * FROM temp_import;
INSERT INTO customers (id, name, phone)
VALUES (100, '錢七', NULL);
INSERT INTO events (event_name, event_time)
VALUES ('用戶登錄', datetime('now'));
INSERT INTO images (img_name, img_data)
VALUES ('avatar', x'89504E470D0A1A0A...');
批量插入優于單條插入:單事務中插入多條比多次單條插入快10-100倍
合理使用索引:插入頻繁的表應減少不必要的索引
預編譯語句:應用程序中應使用參數化查詢
調整PRAGMA設置:
PRAGMA synchronous = OFF;
PRAGMA journal_mode = MEMORY;
PRAGMA cache_size = 10000;
考慮使用.import
命令:對于大規模數據導入
Error: no such table: table_name
解決方案:確保表已創建,檢查表名拼寫
Error: table table_name has X columns but Y values were supplied
解決方案:檢查VALUES子句中的值數量是否與列數匹配
Error: UNIQUE constraint failed: table_name.column_name
解決方案:使用INSERT OR REPLACE/IGNORE或先檢查記錄是否存在
Error: datatype mismatch
解決方案:確保插入的值類型與列定義一致
-- 創建用戶表
CREATE TABLE users (
user_id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
email TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 插入新用戶
INSERT INTO users (username, password_hash, email)
VALUES ('user123', 'a1b2c3d4e5', 'user@example.com');
-- 批量插入訂單明細
BEGIN TRANSACTION;
INSERT INTO order_items (order_id, product_id, quantity, price) VALUES
(1001, 101, 2, 299.99),
(1001, 205, 1, 599.99),
(1001, 308, 3, 99.99);
COMMIT;
-- 使用預編譯語句(Python示例)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
log_data = [
('INFO', '系統啟動', '2023-01-01 08:00:00'),
('WARNING', '內存使用過高', '2023-01-01 08:05:00'),
('ERROR', '數據庫連接失敗', '2023-01-01 08:10:00')
]
cursor.executemany(
"INSERT INTO logs (level, message, timestamp) VALUES (?, ?, ?)",
log_data
)
conn.commit()
SQLite的INSERT INTO
語句雖然語法簡單,但通過不同的使用方式可以滿足各種數據插入需求。關鍵點包括:
合理使用INSERT INTO
語句可以有效管理SQLite數據庫中的數據,為應用提供可靠的數據存儲能力。
”`
注:本文實際約2300字,涵蓋了SQLite INSERT語句的主要知識點。如需更詳細的內容,可以擴展每個章節的示例和解釋。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。