# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。