如何同时往数据库中插入多条记录

如何同时往数据库中插入多条记录,第1张

不同数据库之间略有不同,以几大主流数据库(oracle,sqlserver,mysql)为例。

oracle(以插入三条为例),结尾分号不可省略,否则会报错。

insert into test values (1,'张三');

insert into test values (2,'李四');

insert into test values (3,'王五');

sqlserver(以插入三条为例),语法同oracle,但结尾分号可有可无。

mysql(以插入三条为例),语法同前两者,结尾分号不可省,但还有其他方法,代码如下:

insert into test values (1,'张三'),(2,'李四'),(3,'王五');

在使用SQL数据库的时候,我们也许会需要一次像数据库中添加多条记录,那么我们可以使用SQL语句来实现,该语句具体如下:

--添加一条记录

INSERT INTO tableName(col1,col2,col3) VALUES (1,2,3)

--添加多条记录

INSERT INTO tableName(col1,col2,col3)

SELECT 3,4,5

UNION ALL

SELECT 6,7,8

--从另外的一张表中读取多条数据添加到新表中

INSERT INTO tableName(col1,col2,col3)

SELECT a,b,c FROM tableA

--从其他的多张表中读取数据添加到新表中

INSERT INTO tableName(col1,col2,col3)

SELECT a,b,c FROM tableA WHERE a=1

UNION ALL

SELECT a,b,c FROM tableB WHERE a=2

上边代码中的into都可以省略!

上边代码中的union all如果换成union,则相同记录只插入一次,不会重复插入。

另外一种方法是SQL Server2008特有的,所以,如果你不是SQL Server2008,就不能使用这种方法了。

INSERT INTO MyTable(ID,NAME)VALUES(7,'003'),(8,'004'),(9,'005')

create table [TEST]

(

[NUM_ID] int primary key

)

go

declare @temp int

set @temp=1;

while @temp<=1000000

begin

insert into [TEST]([NUM_ID]) values(@temp)

set @temp=@temp+1;

end

go

----------------------------------------------------------

--试试下面的方法

--2005

DECLARE @n AS BIGINT;

SET @n = 1000000;

WITH Base AS

(

SELECT 1 AS n

UNION ALL

SELECT n + 1 FROM Base WHERE n < CEILING(SQRT(@n))

),

Expand AS

(

SELECT 1 AS c

FROM Base AS B1, Base AS B2

),

Nums AS

(

SELECT ROW_NUMBER() OVER(ORDER BY c) AS n

FROM Expand

)

SELECT n FROM Nums WHERE n <= @n

OPTION(MAXRECURSION 0);

--2

CREATE FUNCTION dbofn_nums(@n AS BIGINT) RETURNS TABLE

AS

RETURN

WITH

L0 AS(SELECT 1 AS c UNION ALL SELECT 1),

L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),

L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),

L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),

L4 AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),

L5 AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),

Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L5)

SELECT n FROM Nums WHERE n <= @n;

GO

--2000 这个会比前两个慢,但是前两个2000不能用

CREATE TABLE dboNums(n INT NOT NULL PRIMARY KEY);

DECLARE @max AS INT, @rc AS INT;

SET @max = 1000000;

SET @rc = 1;

INSERT INTO Nums VALUES(1);

WHILE @rc 2 <= @max

BEGIN

INSERT INTO dboNums SELECT n + @rc FROM dboNums;

SET @rc = @rc 2;

END

INSERT INTO dboNums

SELECT n + @rc FROM dboNums WHERE n + @rc <= @max;

--------------------------------------------------------------------------------------------------------

可以:

这样就行了,给你举个例子:

INSERT INTO `mytest``hello` (

`id` ,

`name`

)

VALUES (

NULL , 'qq'

), (

NULL , 'ww'

), (

NULL , 'ee'

), (

NULL , 'rr'

), (

NULL , 'tt'

);

我们知道当插入多条数据的时候insert支持多条语句:

复制代码

代码如下:

INSERT

INTO

t_member

(id,

name,

email)

VALUES

(1,

'nick',

'nick@126com'),

(4,

'angel','angel@163com'),

(7,

'brank','ba198@126com');

但是对于更新记录,由于update语法不支持一次更新多条记录,只能一条一条执行:

复制代码

代码如下:

UPDATE

t_member

SET

name='nick',

email='nick@126com'

WHERE

id=1;

UPDATE

t_member

SET

name='angel',

email='angel@163com'

WHERE

id=4;

UPDATE

t_member

SET

name='brank',

email='ba198@126com'

WHERE

id=7;

这里问题就出现了,倘若这个update

list非常大时(譬如说5000条),这个执行率可想而知。

这就要介绍一下在MySql中INSERT语法具有一个条件DUPLICATE

KEY

UPDATE,这个语法和适合用在需要判断记录是否存在,不存在则插入存在则更新的记录。

具体的语法可以参见:>

SQLSERVER里面可以采用下面两种办法。使用SELECT INTO 插入行SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义,例如:SELECT Shippers, LinkAddress, LinkCity,LinkRegion, LinkPostalCodeINTO NewShippersFROM ShippersJOIN LinkServerDBdboShippers AS LinkON (ShippersShipperID = LinkShipperID)SELECT INTO 可将几个表或视图中的数据组合成一个表。也可用于创建一个包含选自链接服务器的数据的新表。使用INSERTSELECT 插入行INSERT 语句中的 SELECT 子查询可用于将一个或多个其它的表或视图的值添加到表中。使用 SELECT 子查询可同时插入多行。下面的 INSERT 语句将 titles 中数据的 type 是 modern cooking 的所有行的数据插入到一个单独的表中:USE pubsINSERT INTO MyBooksSELECT title_id, title, typeFROM titlesWHERE type = 'mod_cook'子查询的选择列表必须与 INSERT 语句列的列表匹配。如果没有指定列的列表,选择列表必须与正向其插入的表或视图的列匹配。

默认mysqldump会将多条插入语句导出成一条insert语句格式,如:

insert into t values(1),(2);

那有时我想生成多条insert语句,如:

insert into t values(1);

insert into t values(2);

这时,在mysqldump时加上参数--skip-extended-insert即可。

insert into select

语句功能是从一个表格中读取数据,插入另一个表格。

所以,select 子句的结果集是多条记录,那插入的就是多条。

例 :insert into table_b(a,b) select a,b from table_a;

如果table_a中有多条记录,那都会一起插入 table_b中。

insert一般是用来给表插入一条指定的列值的,但是,insert还存在另一种形式,可以利用它将一条select语句的结果插入表中。

这就是所谓的insert select,顾名思义,它是由一条insert语句和一条select语句组成的。假如你从另一张表中合并客户列表到你的Custumers表,不需要每次读取一行,然后再将它用insert插入,可以如下进行:

insert into Custumer(cust_id,

cust_cintact,

cust_name,

cust_email,

cust_address,

cust_country)

select cust_id,

cust_cintact,

cust_name,

cust_email,

cust_address,

cust_country

from CustNew;

扩展资料

insert select中的列名为简单起见,这个例子在insert和select语句中使用了相同的列名,但是,不一定要求列名匹配。事实上,DBMS甚至不关心select返回的列名,它使用的是列的位置。

因此,select中的第一列(不管其列名)将用来填充表列中的指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。

以上就是关于如何同时往数据库中插入多条记录全部的内容,包括:如何同时往数据库中插入多条记录、如何一次插入多条记录的SQL语句、mysql中能不能运行一次insert插入多条数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10194368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存