看起來我對SQL數據庫的工作原理缺乏一些基本的瞭解,特別是MySQL。 (編輯:現在我正在使用InnoDB引擎。)我有一個用純Groovy(沒有Grails)編寫的程序中的線程,CREATE TABLE
使用groovy.sql.Sql
,這應該是一個圍繞JDBC
的包裝。我的問題是,在這個調用返回之後,我可以立即從另一個線程訪問此表,還是取決於運氣?我必須打電話給sql.close()
或者我必須先從創建線程訪問表,然後從邏輯上它必須被創建?是否立即執行SQL語句?
我知道,例如,如果我有一個交易,那麼該陳述可能不會立即產生影響......或者我認爲。即使我不明確創建事務,但誰知道Groovy或JDBC是否會爲我創建一個事務。如果我使用Hibernate或其他框架,它也可以執行任何它認爲最優化的操作。我的印象是,即使sqlalchemy
python可能會做這種優化,除非我不告訴它。同樣,如果MySQL本身以某種方式緩存我的聲明以供將來執行,爲了性能優化,而不是馬上執行它呢?
是否有任何正式的規則或原則,如ACID,讓我有一定的確定性?我如何知道SQL語句何時完成,以便使用其結果?當然,這同樣適用於其他語言和數據庫類型。
您是否使用InnoDB引擎? – mvp
@mvp:是的。答案是否重要? – osa
它的確如此,因爲InnoDB完全是事務性的(不像MyISAM) – mvp