gpt4 book ai didi

mysql - SQL语句是否立即执行?

转载 作者:行者123 更新时间:2023-11-29 08:21:17 25 4
gpt4 key购买 nike

看来我对 SQL 数据库的工作原理缺乏一些基本的了解,特别是 MySQL。 (编辑:现在我正在使用 InnoDB 引擎。)我在用纯 Groovy(无 Grails)编写的程序中有一个线程,它执行 CREATE TABLE 操作。使用groovy.sql.Sql ,它应该是 JDBC 的包装器。我的问题是,此调用返回后,我可以立即从另一个线程访问该表,还是取决于运气?我需要打电话吗? sql.close()或者我是否必须首先从创建线程访问该表,因为从逻辑上讲它必须被创建?

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

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

最佳答案

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

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

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

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

您可以通过始终使用CREATE TABLE IF NOT EXISTS来缓解这种情况。

关于mysql - SQL语句是否立即执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com