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),与第一个语句相同.
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)