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语法。