Skip to content

INSERT 插入数据

INSERT 语句用于向表中插入新的数据行。本章将详细介绍 INSERT 语句的各种用法。

基本语法

sql
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);

插入单行数据

sql
-- 插入用户数据
INSERT INTO users (id, name, age, email)
VALUES (1, '张三', 25, 'zhang@example.com');

插入数据的方式

方式 1:指定列名(推荐)

sql
INSERT INTO users (name, age, email)
VALUES ('李四', 30, 'li@example.com');

方式 2:不指定列名

sql
-- 必须按表中列的顺序提供所有值
INSERT INTO users
VALUES (2, '王五', 28, 'wang@example.com');

方式 3:部分列插入

sql
-- 只插入部分列,其他列使用默认值或 NULL
INSERT INTO users (name, email)
VALUES ('赵六', 'zhao@example.com');

插入多行数据

sql
INSERT INTO users (name, age, email)
VALUES 
    ('张三', 25, 'zhang@example.com'),
    ('李四', 30, 'li@example.com'),
    ('王五', 28, 'wang@example.com');

从查询结果插入

sql
-- 从其他表复制数据
INSERT INTO users_backup (id, name, age, email)
SELECT id, name, age, email
FROM users
WHERE age > 18;

处理重复数据

INSERT IGNORE

sql
-- 如果数据已存在,忽略错误
INSERT IGNORE INTO users (name, email)
VALUES ('张三', 'zhang@example.com');

ON DUPLICATE KEY UPDATE

sql
-- 如果数据已存在,则更新
INSERT INTO users (id, name, age)
VALUES (1, '张三', 26)
ON DUPLICATE KEY UPDATE age = 26;

使用默认值

sql
-- 使用列的默认值
INSERT INTO users (name, age, status)
VALUES ('张三', 25, DEFAULT);

获取插入的 ID

sql
-- 插入数据后获取自动生成的 ID
INSERT INTO users (name, age) VALUES ('张三', 25);
SELECT LAST_INSERT_ID();

实战示例

用户注册

sql
START TRANSACTION;

INSERT INTO users (username, email, password_hash, created_at)
VALUES ('zhangsan', 'zhang@example.com', SHA2('password', 256), NOW());

SET @user_id = LAST_INSERT_ID();

INSERT INTO user_profiles (user_id, phone)
VALUES (@user_id, '13800138000');

COMMIT;

最佳实践

  1. 始终指定列名
  2. 使用批量插入提高性能
  3. 使用事务处理相关插入
  4. 使用参数化查询防止 SQL 注入

小结

  • INSERT INTO ... VALUES:插入数据
  • 批量插入:一次插入多行
  • INSERT SELECT:从查询结果插入
  • 处理重复:IGNORE、ON DUPLICATE KEY UPDATE

下一步: 学习 UPDATE 更新数据