Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Mysql SQL语句是否立即执行?_Mysql_Sql_Jdbc_Concurrency_Groovy - Fatal编程技术网

Mysql SQL语句是否立即执行?

Mysql SQL语句是否立即执行?,mysql,sql,jdbc,concurrency,groovy,Mysql,Sql,Jdbc,Concurrency,Groovy,看起来我对SQL数据库的工作原理缺乏一些基本的了解,特别是MySQL。(Edit:目前我正在使用InnoDB引擎。)我在一个纯Groovy(无Grails)编写的程序中有一个线程,它使用Groovy.sql.sql创建表,这应该是JDBC的包装器。我的问题是,在这个调用返回后,我是否可以立即从另一个线程访问这个表,还是这取决于运气?我是否必须调用例如sql.close(),或者我必须首先从创建线程访问该表,因为在逻辑上必须创建该表 我知道,例如,如果我有一笔交易,那么该声明可能不会立即生效。。。

看起来我对SQL数据库的工作原理缺乏一些基本的了解,特别是MySQL。(Edit:目前我正在使用InnoDB引擎。)我在一个纯Groovy(无Grails)编写的程序中有一个线程,它使用
Groovy.sql.sql
创建表
,这应该是
JDBC
的包装器。我的问题是,在这个调用返回后,我是否可以立即从另一个线程访问这个表,还是这取决于运气?我是否必须调用例如
sql.close()
,或者我必须首先从创建线程访问该表,因为在逻辑上必须创建该表

我知道,例如,如果我有一笔交易,那么该声明可能不会立即生效。。。我想大概是这样。即使我没有显式地创建事务,谁知道Groovy或JDBC是否会为我创建事务呢。如果我使用Hibernate或其他框架,它也可以做任何它认为最佳的事情。我的印象是,即使是python中的
sqlalchemy
也可能会进行此类优化,除非我告诉它不要这样做。类似地,如果MySQL本身以某种方式缓存我的语句以备将来执行、性能优化,而不是立即执行,该怎么办


是否有任何正式的规则或原则,如ACID,让我有一些确定性?如何知道SQL语句何时完成,以便使用其结果?当然,这同样适用于其他语言和数据库类型。

是的,您可以在创建表后立即使用它,但有一些条件

如果您在同一事务中执行此操作,则没有限制

如果在单独的线程中执行此操作,则必须满足两个条件:

  • 使用
    创建表的事务必须提交
  • 尝试使用新表的线程必须在提交第一个事务后启动另一个事务

您可以通过始终使用
CREATE TABLE IF NOT EXISTS

来缓解此问题。您使用的是InnoDB引擎吗?@mvp:Yes。答案有关系吗?有关系,因为InnoDB完全是事务性的(不像MyISAM)。简短的回答是:是的,这取决于运气。如果另一个线程在您的事务尚未完成时调用,它将不会看到新表。实际上,在线创建表格不是最佳实践之一,你确定需要这样做吗?@Ashalynd:不,我可以避免。等等,让我先读。。。不过,我怎么知道我的交易已经完成,这样我就可以告诉另一个线程继续?谢谢!1.是否保证不同的线程使用不同的连接,因此不在同一事务中?2.如果使用groovy.sql,我如何知道事务是否/何时提交?哪个是JDBC的包装器,哪个是sql的包装器?我可能需要了解这两种方法是如何工作的,不是吗?3.当我显式提交事务并在提交返回后提交时,是否意味着我现在100%安全?1。它不是,这取决于你的应用程序。通常情况下,你想拥有。3.是的,如果事务提交,并且只有在您启动另一个事务后,您才是安全的。太好了。。。我会读更多关于这个主题的文章。看起来JDBC在默认情况下保持自动提交模式:。顺便问一下,您是如何在评论中插入链接的?请使用此链接:
[text](url)