MySQL批量插入是指在一次SQL语句中插入多条记录。返回ID是指在执行插入操作后,获取新插入记录的自增主键ID。
MySQL批量插入主要有两种方式:
INSERT INTO ... VALUES (...), (...), ...语法:INSERT INTO ... VALUES (...), (...), ...语法:INSERT INTO ... SELECT ...语法:INSERT INTO ... SELECT ...语法:批量插入适用于需要一次性插入大量数据的场景,例如:
在执行批量插入后,可以使用LAST_INSERT_ID()函数获取最后插入记录的自增主键ID。对于批量插入,LAST_INSERT_ID()只会返回最后一条记录的ID。
假设我们有一个表users,结构如下:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);批量插入数据并获取ID:
INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
SELECT LAST_INSERT_ID();原因:可能是由于数据约束(如唯一性约束、外键约束)导致的。
解决方法:
START TRANSACTION;
INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
COMMIT;LAST_INSERT_ID()返回值不正确原因:LAST_INSERT_ID()只返回最后一条记录的ID,而不是所有插入记录的ID。
解决方法:
DELIMITER //
CREATE PROCEDURE BatchInsertUsers(IN names VARCHAR(255), IN emails VARCHAR(255))
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE name VARCHAR(255);
DECLARE email VARCHAR(255);
DECLARE result INT;
WHILE i <= LENGTH(names) DO
SET name = SUBSTRING_INDEX(SUBSTRING_INDEX(names, ',', i), ',', -1);
SET email = SUBSTRING_INDEX(SUBSTRING_INDEX(emails, ',', i), ',', -1);
INSERT INTO users (name, email) VALUES (name, email);
SET result = LAST_INSERT_ID();
-- 记录ID或进行其他处理
SELECT result;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;希望这些信息对你有所帮助!
没有搜到相关的文章