如何使用过程将数据插入mysql数据库?

如何使用过程将数据插入mysql数据库?,mysql,Mysql,我有一个过程,其中有两个insert语句,用于两个不同的表。我必须先将数据插入表1,然后才能插入表2。我正在使用PHP进行数据收集。我想知道的是如何在表2中插入多行,其中可以有许多行与表1关联。我该怎么做 我只想在表1中存储一次此人,但表2需要多行。如果这些insert语句在单独的过程中,我不会有问题,但我不知道如何在表2中插入多行,而不让表1拒绝第二条重复记录 BEGIN INSERT INTO user(name, address, city) VALUES(Name, Address,

我有一个过程,其中有两个insert语句,用于两个不同的表。我必须先将数据插入表1,然后才能插入表2。我正在使用PHP进行数据收集。我想知道的是如何在表2中插入多行,其中可以有许多行与表1关联。我该怎么做

我只想在表1中存储一次此人,但表2需要多行。如果这些insert语句在单独的过程中,我不会有问题,但我不知道如何在表2中插入多行,而不让表1拒绝第二条重复记录

BEGIN

INSERT INTO user(name, address, city) VALUES(Name, Address, City);

INSERT INTO order(order_id, desc) VALUES(OrderNo, Description);

END

我建议你分开做,否则你需要一个复杂的解决方案,如果某些东西发生变化,很容易出错

复杂的解决方案是:

使用分隔符连接所有订单号和说明。orderNodeDescription 使用不同的分隔符联接所有订单。orderNodeDescription/orderNodeDescription/。。。 把它交给程序 在该过程中,按顺序分隔符拆分字符串,然后循环遍历每个字符串 对于每个订单,用第一个分隔符拆分字符串,然后插入到相应的列中
正如您所看到的,这很糟糕。

很抱歉,是什么阻止您在单独的查询中将数据插入到这些看似无关的表中?如果您不喜欢中途失败的想法,可以将其包装到事务中。我知道,而且做得很好

直接回答您的问题时,“忽略”模式会将插入过程中的错误转换为警告,因此在尝试插入重复行时,会发出警告,并且不会插入该行,但不会出现错误。

您可以在第一条语句中使用ignore关键字。 :
如果使用IGNORE关键字,则执行INSERT语句时发生的错误将改为警告。例如,在不忽略的情况下,复制表中现有唯一索引或主键值的行将导致重复键错误,语句将中止。使用IGNORE时,该行仍不会插入,但不会发出错误。但不知何故,这对我来说似乎效率很低,从后面刺穿眼睛溶液中的胸部。

Hi Tor。是的,这很糟糕。我已经让其他人告诉我,这非常简单,我需要发出一个单一的调用这个过程,但我不知道这是怎么可能的。我想先验证一下。我必须同意,这很糟糕。@B52s-如果不先序列化列表,就无法将列表传递给过程,因此这是通过一个过程插入多行的唯一方法。Tor,请看一看Shylent在说什么。他的建议行吗?好的,谢谢你。事实上,我同意。我来把插页分开。嗨,希伦。谢谢你的帮助。表面上看似不相关,但事实上它们是相关的。我不好,因为我应该展示,至少是两者之间的共同点。我正在使用mysqli,我当然可以使用事务。我已经试着在t1中输入一条记录,在t2中输入三条记录,但t2只输入了一条。我相信这笔交易已经退回。所以如果我使用IGNORE,那么我将把所有三行都放到表2中?是的,我说的似乎是,因为代码没有以任何方式表明它们是相关的:那么不管怎样,t2只取一行是什么意思?在调用commit之前,您发出了四个insert,它只插入了两个,一个用于t1,一个用于t2?lol。。。我同意。我从来没想过会是这样,但你是对的那么,我应该把insert语句分开吗?这样做对吗?