MySQL中的INSERT语句用于向表中插入新的行。当你需要一次性插入多行数据时,可以使用INSERT INTO ... VALUES (...), (...), ...的语法。
MySQL支持两种主要的插入多行数据的方式:
VALUES子句:INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...),
(value1, value2, value3, ...),
...INSERT INTO table_name (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM another_table
WHERE condition;当你需要批量导入数据时,例如从CSV文件或其他数据源导入数据到MySQL数据库。
假设有一个名为users的表,结构如下:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(50)
);使用多个VALUES子句插入多行数据:
INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');从另一个表插入数据:
INSERT INTO users (name, email)
SELECT name, email FROM temp_users WHERE active = 1;Duplicate entry错误原因:尝试插入的数据与表中已存在的数据冲突,例如主键或唯一索引重复。
解决方法:
INSERT IGNORE或ON DUPLICATE KEY UPDATE语句来处理重复数据。-- 使用INSERT IGNORE
INSERT IGNORE INTO users (name, email)
VALUES ('Alice', 'alice@example.com');
-- 使用ON DUPLICATE KEY UPDATE
INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com')
ON DUPLICATE KEY UPDATE name = VALUES(name), email = VALUES(email);原因:一次性插入大量数据可能导致性能瓶颈。
解决方法:
LOAD DATA INFILE语句从文件中快速导入数据。-- 分批插入数据
INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
...
UNION ALL
SELECT * FROM (SELECT 'Charlie', 'charlie@example.com' UNION ALL SELECT 'David', 'david@example.com') AS tmp
LIMIT 1000;没有搜到相关的文章