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

时间:2010-01-09 14:06:13

标签: mysql

我有一个单独的过程,其中有两个插入语句用于两个不同的表。在插入table2之前,我必须将数据插入table1。我正在使用PHP来进行数据收集。我想知道的是如何在table2中插入多行,table2可以有很多行与table1相关联。我该怎么做?

我想只将一个人存储在table1中一次,但table2需要多行。如果这些插入语句是在单独的过程中,我不会有问题,但我只是不知道如何在没有table1拒绝第二个重复记录的情况下向table2中插入多行。

BEGIN

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

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

END

3 个答案:

答案 0 :(得分:0)

我建议你单独做,否则你需要一个复杂的解决方案,如果出现问题就容易出错。

复杂的解决方案是:

  • 使用分隔符加入所有orderno和说明。 (orderno#描述)
  • 使用其他分隔符加入所有订单。 (orderno#描述/ orderno#描述/...)
  • 将其传递给程序
  • 在程序中,按顺序分隔符拆分字符串,然后遍历每个字符串
  • 对于每个订单,将字符串拆分为第一个分隔符,然后插入相应的列

如您所见,这很糟糕。

答案 1 :(得分:0)

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

直接回答您的问题,insertignore模式在插入警告期间会出错,因此在尝试插入重复行时会发出警告并且未插入行,但是没错。

答案 2 :(得分:0)

您可以在第一个语句中使用IGNORE关键字 http://dev.mysql.com/doc/refman/5.1/en/insert.html

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,行仍未插入,但没有发出错误。
但不知何故,这似乎对我来说效率相当低,“从眼睛后方穿过眼睛刺伤”-solution。