我想将备份表foo_bk中的所有记录插入foo表而不指定列.
如果我尝试这个查询
INSERT INTO foo SELECT * FROM foo_bk
我将收到错误“插入错误:列名称或提供的值的数量与表定义不匹配”.
是否可以在不提供列名的情况下从一个表批量插入到另一个表?
我谷歌它但似乎无法找到答案.所有答案都需要特定的列.
解决方法
你不应该想要这样做.选择*不应该用作插入的基础,因为列可能会被移动并破坏插入(或者更糟糕的是不会破坏插入但会弄乱你的数据.假设有人在select中添加了一个列而不是在其他表中,你的代码会中断.或者假设有人因为超出理解但经常发生的原因决定进行删除并在表上重新创建并将列移动到不同的顺序.现在你的last_name是第一个名字是在原来和select *会将它放在另一个表中的错误列中.如果无法指定列,并且无法在您感兴趣的表中指定一列到您想要的列的特定映射,那么这是一种非常糟糕的做法.
现在你可能有几个问题,首先两个结构不直接匹配,或者第二个被插入的表有一个标识列,所以即使可插入列是直接匹配,插入的表还有一列比另一个并且通过不指定数据库假定您将尝试插入该列.或者您可能具有相同数量的列,但一个是标识,因此无法插入(尽管我认为这将是一个不同的错误消息).