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()
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
很有意思,
这有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);
(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关键词,则
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28