MySQL 批量一对多插入是指在一个事务中,将多个主表记录和对应的多个子表记录一次性插入数据库。这种操作通常用于提高数据插入的效率,尤其是在处理大量数据时。
INSERT INTO ... SELECT 语句:适用于从一个表中选择数据并插入到另一个表中。INSERT INTO ... VALUES 语句:适用于直接插入多组数据。假设我们有两个表:users 和 orders,其中 users 是主表,orders 是子表,它们之间是一对多的关系。
-- 创建 users 表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
-- 创建 orders 表
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product VARCHAR(255) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 批量插入数据
START TRANSACTION;
INSERT INTO users (name) VALUES
('Alice'),
('Bob'),
('Charlie');
INSERT INTO orders (user_id, product) VALUES
(1, 'Product A'),
(1, 'Product B'),
(2, 'Product C'),
(3, 'Product D');
COMMIT;Duplicate entry 错误原因:插入的数据中存在重复的主键或唯一键值。
解决方法:
INSERT IGNORE 或 REPLACE INTO:INSERT IGNORE INTO users (name) VALUES ('Alice'), ('Bob');或者
REPLACE INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob');Deadlock found when trying to get lock 错误原因:多个事务相互等待对方释放锁,导致死锁。
解决方法:
原因:可能是由于网络传输、数据库配置或硬件性能限制。
解决方法:
LOAD DATA INFILE 或第三方工具。希望这些信息对你有所帮助!如果有更多问题,请随时提问。
没有搜到相关的沙龙