语法结构解析
INSERT INTO 表名 (列1,列2) VALUES (值1,值2)[, (值3,值4)...];
逐词解析
INSERT INTO:
INSERT:SQL关键字,表示要执行插入操作INTO:可选关键字,用于提高可读性,表示数据将插入到哪个表中表名:
指定要插入数据的目标表名称
例如:
employees、products等表名区分大小写(取决于MySQL服务器配置)
(列1,列2):
括号内指定要插入数据的列名列表
列名之间用逗号分隔
可以省略,但必须为表中所有列提供值且顺序一致
VALUES:
SQL关键字,表示后面跟随的是要插入的值
(值1,值2):
对应前面列名的值列表
值的数量必须与列数匹配
值的顺序必须与列顺序一致
[, (值3,值4)...]:
可选部分,用于批量插入多行数据
每组括号表示一行数据
每组值必须与列定义匹配
完整示例
-- 向员工表插入单条记录 INSERT INTO employees ( employee_id, first_name, last_name, email, hire_date, job_id, salary ) VALUES ( 207, '张', '三', 'zhangsan@example.com', '2023-08-10', 'IT_PROG', 8500.00 ); -- 批量插入产品记录 INSERT INTO products ( product_id, product_name, category_id, price, stock_quantity ) VALUES (1001, '无线鼠标', 3, 99.99, 50), (1002, '机械键盘', 3, 299.99, 30), (1003, '蓝牙耳机', 4, 199.99, 20);
输出结果:
单条记录插入输出结果:
Query OK, 1 row affected (0.03 sec)
批量插入记录输出结果:
Query OK, 3 rows affected (0.05 sec) Records: 3 Duplicates: 0 Warnings: 0
输出结果说明
单条插入:
返回"Query OK"表示执行成功
"1 row affected"表示影响了一行数据
括号内是执行时间
批量插入:
"3 rows affected"表示成功插入了3条记录
"Records: 3"表示处理了3条记录
"Duplicates: 0"表示没有重复记录
"Warnings: 0"表示没有警告信息
示例解析
单行插入示例解析
INSERT INTO employees:指定要向employees表插入数据列名列表:
employee_id:员工IDfirst_name:名last_name:姓email:电子邮箱hire_date:雇佣日期job_id:职位IDsalary:薪资VALUES子句:207:员工ID值'张':名字符串值'三':姓字符串值'zhangsan@example.com':邮箱字符串值'2023-08-10':日期字符串值'IT_PROG':职位ID字符串值8500.00:薪资数值
批量插入示例解析
INSERT INTO products:指定要向products表插入数据列名列表:
product_id:产品IDproduct_name:产品名称category_id:类别IDprice:价格stock_quantity:库存数量三组VALUES值:
第一行:无线鼠标产品信息
第二行:机械键盘产品信息
第三行:蓝牙耳机产品信息
关键注意事项
列与值匹配:
列数和值数必须相同
数据类型必须兼容(字符串用引号,数字不用)
自增列处理:
对于自增主键,可以指定NULL或0让MySQL自动生成值
也可以完全省略自增列
默认值:
如果列有默认值且插入时未指定,将使用默认值
可以使用DEFAULT关键字显式指定使用默认值
NULL值:
允许NULL的列可以显式插入NULL
不允许NULL的列必须提供有效值
性能考虑:
批量插入比多次单行插入性能更好
大容量插入考虑暂时禁用索引