參考:表結構操作
文章目錄
1、獲取數據庫信息
1、DBMetas():獲取表結構信息
這個方法我直接點進去可以看到他其實是返回一個Table對象數組,然後每一個Table就是包含了表的元數據信息,很多屬性其實不知道是幹嘛的,但是有一些還是比較清楚地.
// DBMetas Retrieve all tables, columns, indexes' informations from database.
func (engine *Engine) DBMetas() ([]*core.Table, error) {}
2、TableInfo(Bean):獲取對應表結構信息
這個方法是根據傳入的結構體映射來獲取對應的Table元數據信息的。看一下這個方法的定義:
// TableInfo get table info according to bean's content
func (engine *Engine) TableInfo(bean interface{}) *Table {}
2、獲取表信息
1、CreateTables(beans):根據結構體創建表
他這個方法應該是支持批量的創建的,看這邊傳入的是一個不定變量的參數,看一下源代碼:
// CreateTables create tabls according bean
func (engine *Engine) CreateTables(beans ...interface{}) error {}
2、IsTableEmpty():判斷表中是否有數據
這個方法感覺是簡化了一步,正常判斷數據應該是根據count的數量來查詢,這個應該是直接給你計算了。
3、IsTableExist():判斷表是否存在
這個沒得說,sql都能寫出來
4、DropTables(beans):批量刪除表
這個方法傳入的也是不定參數,支持批量刪除
3、索引
1、CreateIndexes(bean):創建索引
這個方法好像是根據tag中的標籤來創建的,這邊傳入的是一個Bean對象,映射到數據庫表的實體對象
// CreateIndexes create indexes
func (engine *Engine) CreateIndexes(bean interface{}) error {}
2、CreateUniques(Bean):創建唯一索引
這個方法和上面那個很類似,這個是創建唯一索引的方法
// CreateUniques create uniques
func (session *Session) CreateUniques(bean interface{}) error {}
注意: 這兩個方法好像不會判斷索引是否存在,如果一個索引已經存在的情況,再去創建會報錯,我看源代碼好像是沒有對應的刪除或者判斷的操作。
4、同步數據庫結構
這個不知道作用是咋樣,因爲基本同步數據庫結構是發生在不同的數據庫之間,這邊看的話他是用一個數據庫引擎,同步的是同一個庫的內容,還是說我這邊理解有問題,建議查看原文:同步數據庫結構
5、導入導出SQL腳本
這個功能感覺還是比較使用的,像你在navicate中的導入導出操作基本也是通過這種io的方式去操作的。
1、導入SQL腳本
這個有兩個方法,一個是從文件中導入,一個是從Reader對象中導入:
engine.Import(r io.Reader) //從Reader中導入
engine.ImportFile(fpath string) //從文件中導入
2、導出SQL腳本
有兩個方法,一個是導出到文件,一個是導出到writer對象,可能後續會有操作:
engine.DumpAll(w io.Writer) //導出到writer對象
engine.DumpAllFile(fpath string) //導出到File中