当先锋百科网

首页 1 2 3 4 5 6 7

MySQL主表从表同时插入数据,是在MySQL数据库中操作时经常使用的一种方式,可以方便快捷地更新数据。下面来介绍一下具体操作。

首先,在MySQL中创建两个表,一个主表和一个从表。主表和从表之间需要建立外键约束。比如这里的主表是User,从表是Order,它们的结构如下:

CREATE TABLE `User` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `Order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`product` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_order_user` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

接下来,我们可以使用MySQL的INSERT语句同时插入主表和从表的数据。例如,插入一个User和其对应的Order:

INSERT INTO `User` (`name`, `email`) VALUES ('Tom', 'tom@example.com');
SET @user_id = LAST_INSERT_ID();
INSERT INTO `Order` (`user_id`, `product`) VALUES (@user_id, 'Apple Watch');

上述SQL语句先插入User表的数据,然后获取其自增主键id,保存到用户变量中。然后通过该变量,在Order表中插入对应的数据。

另外,如果需要批量插入数据,也可以使用INSERT INTO ... VALUES语法,多个值之间用逗号隔开即可,例如:

INSERT INTO `User` (`name`, `email`) VALUES ('Jack', 'jack@example.com'), ('Lucy', 'lucy@example.com');
SET @user_id1 = LAST_INSERT_ID();
INSERT INTO `Order` (`user_id`, `product`) VALUES (@user_id1, 'iPhone'), (@user_id1, 'MacBook');
SET @user_id2 = LAST_INSERT_ID();
INSERT INTO `Order` (`user_id`, `product`) VALUES (@user_id2, 'iPad');

上述SQL语句中,先插入两个用户数据,然后获取第一个用户的id保存到变量中,再插入其对应的两个Order数据。之后又获取了第二个用户的id,插入其对应的一个Order数据。

总之,MySQL主表从表同时插入数据,可以使用INSERT INTO语句,先插入主表数据并获取主键,然后使用该主键在从表中插入对应数据。如果需要批量插入,可以使用INSERT INTO ... VALUES语法。