从旧表中选择入和插入之间的区别?

Tri*_*shi 6 sql sql-server-2008

这些在约束**等方面有何不同

选择进入声明

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7
Run Code Online (Sandbox Code Playgroud)

插入声明

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2,
FROM    table2
WHERE   table2.ID = 7
Run Code Online (Sandbox Code Playgroud)

并且

Create table ramm as select * from rammayan

编辑1:

数据库SQL Server 2008

Ja͢*_*͢ck 10

我将在这里假设MySQL.

正如文档所述,前两个是相同的.

第三个语句允许表创建填充,尽管你的语法是错误的; 查看正确的语法以获取更多信息.

更新

这是SQL Server = p

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7
Run Code Online (Sandbox Code Playgroud)

第一个语句将自动创建ItemBack1表,基于table2.

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2,
FROM    table2
WHERE   table2.ID = 7
Run Code Online (Sandbox Code Playgroud)

第二个声明要求table1已经存在.

另见:http://blog.sqlauthority.com/2007/08/15/sql-server-insert-data-from-one-table-to-another-table-insert-into-select-select-into-table /


如果约束存在任何差异,那将是因为第二个语句取决于您已经创建的内容(以及表格是否已填充等).

顺便说一句,第三个语句是Oracle(tm),与第一个语句相同.


Gor*_*off 6

SELECT INTO 和 INSERT 之间有一些非常重要的区别。

首先,对于 INSERT,您需要预先定义目标表。SELECT INTO 创建表作为语句的一部分。

其次,作为第一个条件的结果,您可能会在使用 INSERT 加载到表中时出现类型转换错误。SELECT INTO 不会发生这种情况(尽管底层查询可能会产生错误)。

第三,使用 SELECT INTO 您需要给出所有列的名称。使用 INSERT,您无需为它们命名。

第四,SELECT INTO 在处理过程中锁定了一些元数据。这意味着对数据库的其他查询可能被锁定无法访问表。例如,由于这种锁定,您不能在同一个数据库上同时运行两个 SELECT INTO 语句。

第五,在非常大的插入中,有时您可以使用 INSERT 看到进度,但使用 SELECT INTO 则看不到。至少,这是我的经验。

当我有一个复杂的查询,我想把数据放到一个表中时,我经常使用:

SELECT top 0 *
INTO <table>
FROM <query>

INSERT INTO <table>
    SELECT * FROM <query>
Run Code Online (Sandbox Code Playgroud)