MySQL如何实现一对多添加操作(mysql 一对多添加)

MySQL如何实现一对多添加操作?

在关系型数据库中,一对多是一种常见的关联关系。例如,在一个订单系统中,一个订单可以包含多个商品。因此,当我们在数据库中添加一条订单记录时,需要同时添加多条商品记录。本篇文章将介绍如何使用MySQL实现一对多添加操作。

一、创建相关表结构

假设我们有两个表:订单表(Orders)和商品表(Products),表结构如下:

CREATE TABLE `orders` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`order_no` varchar(50) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `products` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`product_name` varchar(50) NOT NULL,

`price` decimal(10,2) NOT NULL,

`order_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `order_id` (`order_id`),

CONSTRNT `products_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在商品表中,order_id为外键,引用订单表中的id字段。这样可以建立两个表之间的一对多关系。

二、在MySQL中实现一对多添加操作

由于MySQL不支持直接一次性插入多条记录,因此我们需要使用循环插入的方法。具体步骤如下:

1.插入订单记录。

INSERT INTO orders (order_no) VALUES (‘20200101001’);

2.获取刚插入的订单ID。

SELECT LAST_INSERT_ID() INTO @order_id;

3.循环插入商品记录,同时将订单ID赋值给order_id字段。

INSERT INTO products (product_name, price, order_id) VALUES (‘商品A’, 10.00, @order_id);

INSERT INTO products (product_name, price, order_id) VALUES (‘商品B’, 20.00, @order_id);

INSERT INTO products (product_name, price, order_id) VALUES (‘商品C’, 30.00, @order_id);

INSERT INTO products (product_name, price, order_id) VALUES (‘商品D’, 40.00, @order_id);

4.重复步骤1到3,插入更多订单及其商品记录。

在执行上述SQL语句之前,需要先在MySQL客户端中设置delimiter为“//”,以便区分多条SQL语句。

delimiter //

CREATE PROCEDURE insert_orders()

BEGIN

INSERT INTO orders (order_no) VALUES (‘20200101001’);

SELECT LAST_INSERT_ID() INTO @order_id;

INSERT INTO products (product_name, price, order_id) VALUES (‘商品A’, 10.00, @order_id);

INSERT INTO products (product_name, price, order_id) VALUES (‘商品B’, 20.00, @order_id);

INSERT INTO products (product_name, price, order_id) VALUES (‘商品C’, 30.00, @order_id);

INSERT INTO products (product_name, price, order_id) VALUES (‘商品D’, 40.00, @order_id);

END//

delimiter ;

调用存储过程:

CALL insert_orders();

三、使用Python实现一对多添加操作

除了在MySQL客户端中直接执行SQL语句,我们还可以使用Python程序自动化执行这些操作。下面是一个使用Python的示例程序:

import pymysql

import datetime

def insert_orders(order_no, products):

conn = pymysql.connect(host=’localhost’, user=’root’, passwd=’123456′, db=’test’, charset=’utf8′)

cur = conn.cursor()

try:

cur.execute(“INSERT INTO orders (order_no) VALUES (‘%s’)” % order_no)

order_id = conn.insert_id()

for product in products:

product_name = product[0]

price = product[1]

cur.execute(“INSERT INTO products (product_name, price, order_id) VALUES (‘%s’, %.2f, %d)” % (product_name, price, order_id))

conn.commit()

print(“订单添加成功!”)

except Exception as e:

conn.rollback()

print(“订单添加失败:”, e)

finally:

cur.close()

conn.close()

调用insert_orders函数时,需要传入订单号和商品列表。商品列表的每个元素是一个包含商品名称和价格的元组。例如:

order_no = “20200101001”

products = [(“商品A”, 10.00), (“商品B”, 20.00), (“商品C”, 30.00), (“商品D”, 40.00)]

insert_orders(order_no, products)

如果要添加多个订单及其商品记录,可以在程序中循环调用insert_orders函数。

总结

本篇文章介绍了如何使用MySQL实现一对多添加操作,以及如何使用Python程序自动化执行这些操作。希望对大家有所帮助。


数据运维技术 » MySQL如何实现一对多添加操作(mysql 一对多添加)