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;最佳实践
- 始终指定列名
- 使用批量插入提高性能
- 使用事务处理相关插入
- 使用参数化查询防止 SQL 注入
小结
- INSERT INTO ... VALUES:插入数据
- 批量插入:一次插入多行
- INSERT SELECT:从查询结果插入
- 处理重复:IGNORE、ON DUPLICATE KEY UPDATE
下一步: 学习 UPDATE 更新数据