SQLite插入数据报错:contacts表列值不匹配及row value misused问题
SQLite批量插入数据错误排查与修正
问题描述
在Programiz完成SQLite课程作业时,创建contacts表后尝试插入10条记录,出现错误:
Error: table contacts has 5 columns but 10 values were supplied
删除5条记录后又出现:
Error: row value misused
错误原因
- 第一个错误:INSERT语句错误地用外层括号包裹所有行数据,导致SQLite将每个内层括号的内容解析为单个值,10个值与表的5列数量不匹配。
- 第二个错误:嵌套括号的写法不符合SQLite多行插入语法,即便减少记录数量,依然会触发语法解析错误。
另外,contacts表的personal_id是自增主键,插入时可省略该字段值,由SQLite自动生成。
修正后的SQL代码
-- 5 columns -- primary key & correct datatypes -- show table structures -- enter 10 records and view -- update a record -- delete a record -- create relational database (primary key from first table included) CREATE TABLE contacts ( personal_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email_address TEXT NOT NULL UNIQUE, phone_number TEXT NOT NULL UNIQUE ); -- 正确批量插入写法:VALUES后直接跟多个行数据,每行用括号包裹 INSERT INTO contacts (first_name, last_name, email_address, phone_number) VALUES ('James', 'May', 'j.may@gmail.com', '0306 999 0278'), ('James', 'Bay', 'j.bay@gmail.com', '0113 496 0664'), ('James', 'Cray', 'j.cray@gmail.com', '0116 496 0578'), ('James', 'Faye', 'j.faye@gmail.com', '0116 496 0629'), ('James', 'Way', 'j.way@gmail.com', '0151 496 0764'), ('James', 'Pay', 'j.pay@gmail.com', '0141 496 04678'), ('James', 'Lay', 'j.lay@gmail.com', '0116 496 0840'), ('James', 'Whey', 'j.whey@gmail.com', '0113 496 0744'), ('James', 'Say', 'j.say@gmail.com', '0161 496 08588'), ('James', 'Gray', 'j.gray@gmail.com', '0114 496 0401');
关键说明
- 明确指定要插入的列名,避免因主键自增导致的列数匹配问题。
- 多行插入时,每个行数据单独用括号包裹,直接放在
VALUES后,无需额外外层括号。
内容的提问来源于stack exchange,提问作者edpor
相关产品推荐
相关产品推荐

