Sql 3个数据源与计算数据源的联接因死锁而失败
我在一个连接了两个SQL数据源的计算数据库中有这段代码(运行良好):Sql 3个数据源与计算数据源的联接因死锁而失败,sql,google-cloud-sql,google-app-maker,Sql,Google Cloud Sql,Google App Maker,我在一个连接了两个SQL数据源的计算数据库中有这段代码(运行良好): select m.Email, m.SkuID,m.SkuName,l.Email,l.LastLogin,l.DocsAdded from Licenses m inner join ActivityReport l on l.Email = m.Email 由于reports API中的一个错误提供了有关LastLogin时间信息的错误信息,我正在使用Users.get API并将该信息写入一个新的数据源(仅包括用户的电
select m.Email, m.SkuID,m.SkuName,l.Email,l.LastLogin,l.DocsAdded
from Licenses m
inner join ActivityReport l on l.Email = m.Email
由于reports API中的一个错误提供了有关LastLogin
时间信息的错误信息,我正在使用Users.get API并将该信息写入一个新的数据源(仅包括用户的电子邮件及其上次登录时间)。我想把它和另外两个数据源连接起来。使用以下代码:
select m.Email, m.SkuID,m.SkuName,l.Email,l.DocsAdded,x.Email,x.LastLogin as LastLogin
from Licenses m
inner join ActivityReport l on l.Email = m.Email
inner join LastLogin x on x.Email = l.Email
我得到一个错误:
License save batch failed: JDBC backend failure. More information: Failed to execute connection with error: Deadlock found when trying to get lock; try restarting transaction
我还发现两个错误,如下所示:
许可证批量保存失败:SQL格式不正确。更多信息:SQL语句错误:重复条目'user@email.com'用于键'PRIMARY'
我做错了什么 我认为您可能需要在内部连接中添加'as',除非您已经在未发布的部分代码中声明了这一点
from Licenses **as** m
inner join ActivityReport **as** l on l.Email = m.Email
inner join LastLogin **as** x on x.Email = l.Email
第二个错误是,您有多个要加入的条目。因此,您可以考虑尝试加入具有唯一条目的东西,以确保您在连接中没有重复。 我认为您可能需要在内部连接中添加'as',除非您已经在未发布的部分代码中声明了这一点
from Licenses **as** m
inner join ActivityReport **as** l on l.Email = m.Email
inner join LastLogin **as** x on x.Email = l.Email
第二个错误是,您有多个要加入的条目。因此,您可以考虑尝试加入具有唯一条目的东西,以确保您在连接中没有重复。 查询中没有问题,查询是正确的,但这是死锁问题,所以当服务器上运行多个线程时,例如:
死锁
是一种情况,其中一组进程被阻塞,因为每个进程持有一个资源,并等待其他进程获取另一个资源。因此,如果出现死锁
,系统
会自动取消成本较低的查询
如果您稍后再试,则不会出现问题,因此不会出现错误提示。
您的查询中没有问题,查询是正确的,但这是死锁问题,因此当服务器上运行多个线程时,例如:
死锁
是一种情况,其中一组进程被阻塞,因为每个进程持有一个资源,并等待其他进程获取另一个资源。因此,如果出现死锁
,系统
会自动取消成本较低的查询
如果您稍后再试,则不会出现问题,因此不会出现错误提示。
我想您是在Oracle数据库上。你可能想编辑标签以吸引合适的用户来帮助你,这只是一个建议。我正在使用AppMaker中的默认数据库,它是Google的CloudSql。你的数据库中存在死锁问题。您可以使用“显示引擎innodb状态”更好地诊断此问题。另外,我建议你在stackoverflow上检查一下。这是一个关于死锁以及如何避免死锁的完整讨论。@Ian,你能检查一下我对你的问题的回答吗?。我想你是在Oracle数据库上。你可能想编辑标签以吸引合适的用户来帮助你,这只是一个建议。我正在使用AppMaker中的默认数据库,它是Google的CloudSql。你的数据库中存在死锁问题。您可以使用“显示引擎innodb状态”更好地诊断此问题。另外,我建议你在stackoverflow上检查一下。这是一个关于死锁以及如何避免死锁的完整讨论。@Ian,你能检查一下我的查询答案吗..当我尝试使用以下内容时,我遇到了语法错误:
异常:格式错误的SQL。更多信息:SQL语句错误:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第1行使用“从许可证作为m内部加入活动报告作为l on l.Email=m.Email内部”。尝试使用此命令时,我遇到语法错误:异常:格式错误的SQL。更多信息:SQL语句错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解第1行的“从许可证作为m内部加入活动报告作为l上的l.Email=m.Email内部”使用的正确语法。