跳转到内容

SQL插入数据

来自代码酷

SQL插入数据[编辑 | 编辑源代码]

SQL插入数据SQL INSERT)是结构化查询语言(SQL)中的核心操作之一,用于向数据库表中添加新记录。它是数据库操作的基础,广泛应用于数据初始化、数据迁移和动态数据录入等场景。

基本语法[编辑 | 编辑源代码]

INSERT语句的基本语法如下:

INSERT INTO 表名 (1, 2, 3, ...)
VALUES (1, 2, 3, ...);

其中:

  • 表名:要插入数据的目标表名称
  • 列1, 列2, ...:要插入数据的列名(可选,如果省略则表示插入所有列)
  • 值1, 值2, ...:对应列要插入的具体值

示例1:向学生表插入单条记录[编辑 | 编辑源代码]

假设我们有一个学生表`students`,结构如下:

erDiagram STUDENTS { id INT PK name VARCHAR age INT major VARCHAR }

插入一条学生记录的SQL语句:

INSERT INTO students (id, name, age, major)
VALUES (1, '张三', 20, '计算机科学');

执行后,表数据将变为:

id name age major
1 张三 20 计算机科学

高级插入方式[编辑 | 编辑源代码]

插入多行数据[编辑 | 编辑源代码]

可以一次性插入多条记录,语法如下:

INSERT INTO 表名 (1, 2, ...)
VALUES 
    (1, 2, ...),
    (1, 2, ...),
    ...
    (1, 2, ...);

示例2:批量插入学生记录[编辑 | 编辑源代码]

INSERT INTO students (id, name, age, major)
VALUES 
    (2, '李四', 21, '数学'),
    (3, '王五', 19, '物理'),
    (4, '赵六', 22, '化学');

执行后表数据:

id name age major
1 张三 20 计算机科学
2 李四 21 数学
3 王五 19 物理
4 赵六 22 化学

从其他表插入数据[编辑 | 编辑源代码]

可以使用SELECT子句从其他表查询数据并插入:

INSERT INTO 目标表 (1, 2, ...)
SELECT 1, 2, ...
FROM 源表
WHERE 条件;

示例3:从临时表导入数据[编辑 | 编辑源代码]

假设有临时表`temp_students`:

INSERT INTO students (id, name, age, major)
SELECT id, name, age, major
FROM temp_students
WHERE age > 18;

特殊插入情况[编辑 | 编辑源代码]

插入默认值[编辑 | 编辑源代码]

如果列定义了默认值,可以使用DEFAULT关键字:

INSERT INTO students (id, name, age, major)
VALUES (5, '钱七', DEFAULT, '生物');

忽略重复记录[编辑 | 编辑源代码]

某些数据库支持忽略重复记录的插入方式(MySQL示例):

INSERT IGNORE INTO students (id, name, age, major)
VALUES (1, '张三', 20, '计算机科学');

替换重复记录[编辑 | 编辑源代码]

某些数据库支持替换重复记录(MySQL示例):

REPLACE INTO students (id, name, age, major)
VALUES (1, '张三', 20, '计算机科学');

性能考虑[编辑 | 编辑源代码]

批量插入时,考虑以下性能优化:

  • 使用事务包装多个INSERT语句
  • 适当增加批量插入的行数(通常100-1000行/批)
  • 禁用索引和约束(大数据量导入时)

事务示例[编辑 | 编辑源代码]

BEGIN TRANSACTION;

INSERT INTO students (id, name, age, major) VALUES (5, '孙八', 23, '历史');
INSERT INTO students (id, name, age, major) VALUES (6, '周九', 21, '地理');
INSERT INTO students (id, name, age, major) VALUES (7, '吴十', 20, '政治');

COMMIT;

实际应用案例[编辑 | 编辑源代码]

电商系统用户注册[编辑 | 编辑源代码]

当新用户注册时,需要向用户表插入数据:

INSERT INTO users (user_id, username, email, password_hash, register_date)
VALUES 
    (UUID(), 'new_user', 'user@example.com', SHA2('password123', 256), NOW());

日志记录系统[编辑 | 编辑源代码]

记录系统操作日志:

INSERT INTO system_logs (log_id, user_id, action, ip_address, timestamp)
VALUES 
    (UUID(), 'admin123', 'LOGIN', '192.168.1.100', CURRENT_TIMESTAMP);

常见错误与解决方案[编辑 | 编辑源代码]

错误类型 原因 解决方案
列数不匹配 VALUES子句中的值数量与列数不一致 检查列名和值数量是否匹配
数据类型不匹配 插入的值与列定义的数据类型不符 确保值类型与列定义一致
违反约束 违反主键、外键或其他约束 检查约束条件,确保数据合规
语法错误 SQL语句格式错误 检查关键字拼写和语句结构

数学表示[编辑 | 编辑源代码]

从关系代数角度看,INSERT操作可以表示为:

RR{t}

其中:

  • R是关系(表)
  • t是要插入的元组(记录)

总结[编辑 | 编辑源代码]

SQL INSERT语句是数据库操作的基础,掌握各种插入方式对于高效数据管理至关重要。关键点包括:

  • 基本单行插入语法
  • 多行批量插入方法
  • 从其他表导入数据
  • 处理特殊插入情况
  • 性能优化技巧

通过实际案例练习,可以更好地理解和应用INSERT语句。