我有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=latin1CREATE 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.
我也可以这样做:
Bulk insert into table A.Select all IDs from table A.Insert into table B using selected IDs.
但我正在寻找另一种方式.
什么是最有效的方式来实现我想要做的事情?
最佳答案首先确保table_a中的值列上有UNIQUE INDEX,然后执行批量INSERT IGnorEINSERT IGnorE INTO table_a(value) VALUES("123"),("345"),("afasd"),("#$#$%"),...
现在您确定所有值都在table_a中,并且您可以安全地使用批量table_b插入方法. 总结
以上是内存溢出为你收集整理的php – MySQL INSERT或SELECT全部内容,希望文章能够帮你解决php – MySQL INSERT或SELECT所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)