+ -
当前位置:首页 → 问答吧 → mysql如何多行插入?求语句

mysql如何多行插入?求语句

时间:2011-11-18

来源:互联网

mysql如何多行插入

作者: wonderboyes   发布时间: 2011-11-18

# 连接数据库
conn = MySQLdb.Connection(host="localhost", user="root", passwd="", charset="UTF8")
conn.select_db(test)

# 创建指针,并设置数据的返回模式为字典
cursor = conn.cursor(MySQLdb.cursors.DictCursor)

# 执行SQL
cursor.executemany("insert into page values (%s,%s,%s,%s,%s,%s,%s)", T)

# 关闭指针
cursor.close()

# 关闭数据库连接
conn.close()

作者: jiaweiqq123   发布时间: 2011-11-18

executemany 用起来还是会提高效率的

作者: jiaweiqq123   发布时间: 2011-11-18

insert into tt values(1,2,3),(4,5,6)...

很有意思,
这有1个帖子
http://topic.csdn.net/u/20111117/16/06987537-860d-4fa4-9a47-f4727c2a2875.html

作者: WWWWA   发布时间: 2011-11-18

insert into tableName values
(1,11),
(2,22),
(3,33),
(4,44),
(5,55),
(6,66);

作者: ACMAIN_CHM   发布时间: 2011-11-18


引用
13.2.4. INSERT语法
13.2.4.1. INSERT ... SELECT语法
13.2.4.2. INSERT DELAYED语法
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
INSERT用于向一个已有的表中插入新行。INSERT...VALUES和INSERT...SET形式的语句根据明确指定的值插入行。INSERT...SELECT形式的语句插入从其它表中选出的行。在13.2.4.1节,“INSERT ... SELECT语法”中对INSERT...SELECT进行了进一步的讨论。

行应被插入到tbl_name表中。可以按以下方法指定列。本语句向这些列提供值。

· 列名称清单或SET子句明确的指示了列。

· 如果您不为INSERT...VALUES或INSERT...SELECT指定列的清单,则表中每列的值必须在VALUES清单中提供,或由SELECT提供。如果您不知道表中各列的顺序,则使用DESCRIBE tbl_name查询。

列值可以采用多种方法给定:

· 如果不是在严格模式下运行,则所有没有明确给定值的列都被设置为默认值(明确的或隐含的)。例如,如果您指定了一个列清单,但此清单没有对表中所有的列进行命名,则未命名的各列被设置为默认值。默认值的赋值在13.1.5节,“CREATE TABLE语法”中进行了说明。也可参见1.8.6.2节,“对无效数据的约束”。

有时候,您需要对所有没有默认值的列明确地指定值。如果您希望,在没有明确指定值时,INSERT语句可以生成错误信息,则您应该使用STRICT模式。请参见5.3.2节,“SQL服务器模式”。

· 使用关键词DEFAULT,明确地把列设置为默认值。这样,编写向所有列赋值的INSERT语句时可以更容易,因为使用DEFAULT可以避免编写出不完整的、未包含全部列值的VALUES清单。如果不使用DEFUALT,您必须编写一个列名称清单,与VALUES清单中的每个值对应。

您还可以使用DEFAULT(col_name)作为一种更通用的形式,在表达式中使用,用于生成一个列的默认值。

· 如果列清单和VALUES清单均为空清单,则INSERT会创建一个行,每个列都被设置为默认值:

· mysql> INSERT INTO tbl_name () VALUES();
在STRICT模式中,如果有一列没有默认值,则会出现错误。或者,MySQL会对所有没有明确定义默认值的列使用隐含的默认值。

· 您可以指定一个表达式expr来提供一个列值。如果表达式的类型与列值不匹配,这样做会造成类型转化。并且,给定值的转化会导致不同的插入值,插入何值由列类型而定。例如,向一个INT, FLOAT, DECIMAL(10,6)或YEAR列插入字符串'1999.0e-2',插入值分别是1999,19.9921,19.992100和1999。存储在INT和YEAR列中的值为1999的原因是,在从字符串到整数的转化中,只把字符串的前面部分看作有效的整数或年份。对于浮点列和固定点列,在从字符串到浮点的转化中,把整个字符串均看作有效的浮点值。

表达式expr可以引用在值清单中已设置的所有列。例如,您可以这么操作,因为用于col2的值引用了col1,而col1已经被赋值:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
但是以下语句不合法,因为用于col1的值引用了col2,而col2在col1之后被赋值:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
有一种例外情况,那就是含有AUTO_INCREMENT值的列。因为AUTO_INCREMENT值在其它值赋值之后被生成,所以任何在赋值时对AUTO_INCREMENT列的引用都会返回0。

INSERT语句支持下列修改符:

· 如果您使用DELAYED关键字,则服务器会把待插入的行放到一个缓冲器中,而发送INSERT DELAYED语句的客户端会继续运行。如果表正在被使用,则服务器会保留这些行。当表空闲时,服务器开始插入行,并定期检查是否有新的读取请求。如果有新的读取请求,则被延迟的行被延缓执行,直到表再次空闲时为止。请参见13.2.4.2节,“INSERT DELAYED语法”。

· 如果您使用LOW_PRIORITY关键词,则

作者: ACMAIN_CHM   发布时间: 2011-11-18