菜鸟请教个数据库多个关联表插入数据的问题

xiongyejun · · 729 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

**比如有以下2个表:** ![微信截图_20180711190646.png](https://static.studygolang.com/180711/e28f4c22e27cded973bc335a02994d12.png) * 表a记录一些基础信息:create table ta (id integer not null primary key autoincrement, name text not null); * 表b的aid关联表a的id:create table tb (aid integer not null, t DATE, value DOUBLE not null, primary key(aid,t)); **待插入的数据:** ``` type insertData struct { name string t string value float64 } ``` **数据插入时:** 1. 如果name在表a中存在,就获取它的id,然后再插入到表b,如果表b已经存在,就更新value 2. 如果name在表a中不存在,先插入到表a,然后再同上面一样 数据库我用的很少,我能想到的办法就是每一个都去表a里判断是否存在,然后再读取id,或者是插入后再读取id,这样一个一个操作很慢,想学习下有什么好方法解决这种问题?请高手指教,谢谢。 ``` package main import ( "database/sql" "fmt" "os" _ "github.com/mattn/go-sqlite3" ) type insertData struct { name string t string value float64 } type dataStruct struct { DBPath string db *sql.DB } var d *dataStruct func init() { d = new(dataStruct) d.DBPath, _ = os.Getwd() d.DBPath += `\test.db` } func main() { if err := d.getDB(); err != nil { fmt.Println(err) return } } // 如何高效的实现 func (me *dataStruct) insertData(data []inserData) { } func (me *dataStruct) getDB() (err error) { if _, err = os.Stat(d.DBPath); err == nil { if me.db, err = sql.Open("sqlite3", d.DBPath); err != nil { return } else { fmt.Println("成功打开数据库。") return nil } } else { if me.db, err = sql.Open("sqlite3", d.DBPath); err != nil { return } else { sqlStmt := `create table ta (id integer not null primary key autoincrement, name text not null);` if _, err = d.db.Exec(sqlStmt); err != nil { return } else { fmt.Println("成功创建表a。") sqlStmt = `create table tb (aid integer not null, t DATE, value DOUBLE not null, primary key(aid,t));` if _, err = d.db.Exec(sqlStmt); err != nil { return } else { fmt.Println("成功创建表b。") return nil } } } } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

729 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传