看起来我对 SQL 数据库的工作原理缺乏一些基本的了解,特别是 MySQL。(编辑:现在我正在使用 InnoDB 引擎。)我在一个用纯 Groovy(没有 Grails)编写的程序中有一个线程,它CREATE TABLE
使用. 我的问题是,在这个调用返回后,我可以立即从另一个线程访问这个表,还是取决于运气?我是否必须调用例如,或者我必须首先从创建线程访问表,然后逻辑上必须创建它?groovy.sql.Sql
JDBC
sql.close()
我知道,例如,如果我有一笔交易,那么该声明可能不会立即生效……或者我认为。即使我没有显式创建事务,谁知道 Groovy 或 JDBC 是否会为我创建一个事务。如果我使用的是 Hibernate 或其他一些框架,它也可以做任何它认为最佳的事情。我的印象是,即使sqlalchemy
在 python 中也可能会做一些这种优化,除非我告诉它不要这样做。同样,如果 MySQL 本身以某种方式缓存我的语句以供将来执行、性能优化,而不是立即执行呢?
是否有任何正式的规则或原则,例如 ACID,让我有一定的把握?我如何知道 SQL 语句何时完成以便我可以使用它的结果?当然,这同样适用于其他语言和数据库类型。