
SQL 插入数据示例详解
在数据库操作中,INSERT 语句是向数据表中添加新数据的核心命令。无论是日常的数据录入,还是系统间的数据迁移,熟练掌握各种插入数据的方式都是极其重要的。本文将结合实际示例,详细讲解 SQL 插入数据的多种用法与最佳实践。
一、基础语法:插入单条数据
向表中插入数据最常见的方式是使用 INSERT INTO ... VALUES 语法。在插入时,可以指定列名,也可以省略。但在生产环境中,强烈建议显式指定列名,以避免表结构变更带来的潜在隐患。
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
示例:向 users 表中插入一条新用户记录。
INSERT INTO users (username, age, email)
VALUES ('zhangsan', 28, 'zhangsan@ipipp.com');二、高效写入:插入多条数据
如果需要一次性插入多条记录,推荐使用批量插入语法,而不是多次执行单条插入语句。批量插入可以显著减少数据库的连接开销和 SQL 解析时间,大幅提升写入性能。
INSERT INTO users (username, age, email)
VALUES
('lisi', 24, 'lisi@ipipp.com'),
('wangwu', 30, 'wangwu@ipipp.com'),
('zhaoliu', 27, 'zhaoliu@ipipp.com');三、省略列名:使用默认值与自增
当表中的某些列设置了默认值(DEFAULT)或者是自增主键(AUTO_INCREMENT)时,在插入数据时可以省略这些列,数据库会自动处理缺失列的值。
INSERT INTO users (username)
VALUES ('qianqi');在上述示例中,id 列如果是自增主键会自动递增生成,age 和 email 如果设有默认值或允许为 NULL,也会按相应规则自动填充。
四、数据迁移:从另一个表查询并插入
在数据清洗或表备份时,经常需要将一个表的数据插入到另一个表中。此时可以使用 INSERT INTO ... SELECT 语句。需要注意的是,查询出的列数量和数据类型必须与目标表一致。
INSERT INTO users_backup (username, age, email) SELECT username, age, email FROM users WHERE age > 25;
此语句会将 users 表中年龄大于 25 岁的用户数据批量复制到 users_backup 表中。
五、安全防范:防止 SQL 注入
在实际开发中,直接拼接 SQL 字符串是非常危险的,容易引发 SQL 注入攻击。专业的做法是使用预处理语句(Prepared Statements),将数据与 SQL 逻辑分离。
PHP (PDO) 预处理示例:
$stmt = $pdo->prepare("INSERT INTO users (username, age, email) VALUES (:name, :age, :email)");
$stmt->execute([
'name' => $username,
'age' => $age,
'email' => $email
]);六、注意事项总结
1. 引号使用:字符串和日期类型的值必须包含在单引号内,而数值类型则不需要。
2. 字段匹配:插入的值数量、顺序和数据类型必须与指定的列严格对应。
3. 性能优化:针对大批量数据导入,优先使用批量插入语法。若数据量极大,建议分批次提交事务,避免长事务导致的锁表或内存溢出问题。