Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 3个数据源与计算数据源的联接因死锁而失败_Sql_Google Cloud Sql_Google App Maker - Fatal编程技术网

Sql 3个数据源与计算数据源的联接因死锁而失败

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并将该信息写入一个新的数据源(仅包括用户的电

我在一个连接了两个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.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内部”使用的正确语法。