草庐IT

insert-query

全部标签

mySQL 5.0.45 LAST_INSERT_ID() 和大于 signed int 的值

我正在尝试在一个自动递增的索引上使用LAST_INSERT_ID,该索引已经超过了带符号的int值2147483647。此列是一个无符号的int。但是,LAST_INSERT_ID()返回无效的负值。研究这个,我发现了一些评论表明这是这个功能的本质。但我找不到它的正式记录。有一些可以追溯到几年前的错误报告仍然开放。所以我需要知道这是否真的是一个已知错误和/或我是否可以对此做些什么。我需要将mySQL升级到更新的版本吗? 最佳答案 我不是100%确定这一点,但由于您只需要ID而不是对其进行任何数学运算,您是否可以将其作为字符串处理并让

mysql - "foreach"循环 : Using all cores in R (especially if we are sending sql queries inside foreach loop)

我打算使用“foreach”来利用我CPU中的所有内核。问题是我需要在循环内发送一个sql查询。该脚本在正常的“for”循环中运行良好,但当我将其更改为“foreach”时出现以下错误。错误是:select:Interruptedsystemcallselect:Interruptedsystemcallselect:InterruptedsystemcallErrorin{:task1failed-"expiredMySQLConnection"我使用的代码是:library(foreach)library(doMC)library(RMySQL)library(multicore)

mysql - UPDATE 语句在 "query end state"

我们最近升级了运行在mysql服务器版本5.5.8上的mysql数据库。升级后,有时我们会看到简单的升级staements花费超过10秒。当我查看进程列表时,它显示所有进程都处于“查询结束”状态。有没有人对此有任何想法。UPDATEAccountsSETIPadd='xx.xx.xx.xx',updatedtime=NULLWHEREId=xx; 最佳答案 我在这里检查了一些解决方案,然后想到了这个link.添加这一行(如果它存在编辑它):innodb_flush_log_at_trx_commit=0在/etc/my.cnf中然而

mysql - "Packet for query is too large"在带有 mysql 的 java web 应用程序中

我有一个在ubuntu上的tomcat7上运行的Web应用程序,并连接到同一台机器上的mysql数据库。为了管理连接,我正在使用Hikari数据源并使用Hibernate作为ORM。运行服务器几天后,我开始在日志文件中遇到以下问题,并且所有请求开始失败Causedby:com.mysql.jdbc.PacketTooBigException:Packetforqueryistoolarge(1317>1024).Youcanchangethisvalueontheserverbysettingthemax_allowed_packet'variable.我已经在mysql服务器中设置了

mysql - Golang db.Query with sql join

我想查询一个问题及其所有答案。以下两个函数工作得很好。问题是我认为这应该在一个函数中通过一个查询来完成。(为简洁起见,我删除了错误检查)。funcQuestionById(idstring)(*Question,error){question:=new(Question)_=db.QueryRow("select*fromquestionwherequestion.id=?",id).Scan(&question.Id,&question.LessonId,&question.Body,&question.Type,)returnquestion,nil}funcAnswersByQu

仅当行不存在时 MySQL INSERT,否则选择重复行

我正在寻找一个语句,它会尝试将一行插入表中,但如果遇到重复行,则返回重复行的主键。表中一个字段是自增主键,另一个是唯一的。 最佳答案 至少在理论上,这应该对您有用:首先扩展您的表以增加一个tinyint类型的虚拟列。然后你可以在插入/更新时使用下面的查询:INSERTINTOyourtable(a,b)VALUES(1,2)ONDUPLICATEKEYUPDATEid=LAST_INSERT_ID(id),dummy=NOTdummy(我在这里假设列a具有唯一索引并且存在a=1的行。)然后您可以通过以下方式获取新行的ID(在插入的情

mysql - 获取多个 INSERT 的唯一 ID

我需要从单个查询中取回所有插入的ID(来自自动递增的字段),该查询将20多行内容插入MySQL数据库。到目前为止,我有这样的事情:INSERTINTO[tablename](...)VALUES(...),(...),(...);我需要如何修改上述查询才能取回所有插入的ID?我发现一些建议使用DECLARE的主题,但当我尝试运行查询时,PhpMyAdmin总是返回错误。谢谢! 最佳答案 MyISAM应该为您的插入锁定表,所以感觉您可以取回一个值并抵消受影响的行数。为了真正安全,添加“批处理”列并插入基于session的变量怎么样?然

mysql - 什么更好 : joins or multiple sub-select statements as part of one query

性能方面,什么更好?如果我的查询中有3或4个join语句或使用嵌入式select语句作为一个查询的一部分从我的数据库中提取相同的信息? 最佳答案 我会说联接更好,因为:它们更易于阅读。您可以更好地控制是要执行内部、左/右外部联接还是完全外部联接不能轻易滥用连接语句来创建可憎的查询使用联接,查询优化器可以更容易创建快速查询(如果内部选择很简单,结果可能相同,但对于更复杂的东西,联接会起作用更好)。嵌入的select只能模拟left/rightouterjoin。有时您无法使用联接来做某事,在这种情况下(并且只有在那时)您将不得不求助于

php - 是否有可能从 PHP(使用 ZEND)执行时 INSERTS 被延迟?

当我有这样的循环时:foreach(...){$r1=$zend_db->fetchRow("SELECT...");$zend_table->insert($data_array,$where);}...运行几千次。$r1是否可能不包含在前一个循环中插入的记录?在http://dev.mysql.com/doc/refman/5.1/en/query-cache.html他们写道“查询缓存不返回陈旧数据。修改表时,查询缓存中的所有相关条目都会被刷新。”但也许ZEND会为SELECT或INSERT做一些意想不到的缓存?我需要使用事务来解决这个问题吗?我遇到了双重记录的问题,没有其他解释

php - 大型数据集 : mysql_unbuffered_query with innodb?

基本上我需要对大型数据集进行操作,所以我开始考虑我可以使用mysql_unbuffered_query来不将所有结果加载到RAM中。但我读到,当我获取行时,我无法在同一个表上运行任何其他查询。我想知道如果表是innodb是否仍然如此?Innodb在执行mysql_unbuffered_query时是否使用行级锁定?伪代码是:$q=mysql_unbuffered_query("SELECT*FROMlargeTable");while($r=fetch($q)){if(somecondition)mysql_query("UPDATElargeTableSETfield=someval