MySQL   发布时间:2022-05-15  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – MySQL INSERT或SELECT大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有2个表table_a和table_b.

CREATE TABLE `table_a` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,`val` varchar(64) NOT NULL,PRIMARY KEY (`ID`),UNIQUE KEY `val` (`val`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

CREATE TABLE `table_b` (
 `ref_a` int(11) unsigned NOT NULL,`data` int(11) unsigned NOT NULL,UNIQUE KEY `unique_index` (`ref_a`,`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

我想MASS INSERT到表B中,ref_a值指的是表A的ID.

这就是我想要完成的事情:

SELECT ID FROM table_a WHERE val = "123"

如果该值不存在,则插入该值

INSERT INTO table_a(val) VALUES("123")

现在我得到了ID(假设它是“1”),我想插入table_b:

INSERT INTO table_b(ref_a,data) VALUES(1,75)

当我想批量进行时,问题出现了.如果我在SELECTS和INSERTS之间交替而不是进行批量插入,那么我的表现是否会下降,然后批量选择?

我可以:

INSERT INTO table_b(ref_a,data) VALUES((SELECT ID FROM table_a WHERE value="123"),75)

但是,如果缺少值并且我需要事先插入,该怎么办?

我不能BEGIN TRANSACTION和COMMIT,因为我需要在插入后检索表A的ID.

我也可以这样做:

但我正在寻找另一种方式.

什么是最有效的方式来实现我想要做的事情?

最佳答案
首先确保table_a中的值列上有UNIQUE INDEX,然后执行批量INSERT IGnorE

INSERT IGnorE INTO table_a(value) VALUES("123"),("345"),("afasd"),("#$#$%"),...

现在您确定所有值都在table_a中,并且您可以安全地使用批量table_b插入方法.

大佬总结

以上是大佬教程为你收集整理的php – MySQL INSERT或SELECT全部内容,希望文章能够帮你解决php – MySQL INSERT或SELECT所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: