我已经创建了一些应该循环通过.csv文件的代码,然后从该文件创建插入,然后将其插入数据库。
现在,由于FK的限制,我必须先将记录插入特定表中,然后再插入其他表中。
当我实际上插入数据库时,如何忽略FK约束?
这样做有什么弊端吗?
我应该提到,我要插入的记录将在空白数据库中。
这是我目前正在从事的工作:
type InsertTestThing struct {
ID int `csv:"id"`
Name string `csv:"name"`
}
func InsertTestFileLoader(filename string, channel chan InsertTestThing) {
defer close(channel)
file, err := os.Open(filename)
if err != nil {
panic(err)
}
defer file.Close()
var InsertTestNew InsertTestThing
reader := csv.NewReader(file)
for {
err := unmarshal.Unmarshal(reader, &InsertTestNew)
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
channel <- InsertTestNew
}
}
func saveInsertTest(channel <-chan InsertTestThing, db *sql.DB) {
stmt, err := db.Prepare(`INSERT INTO InsertTest (id, name) VALUES (?, ?);`)
if err != nil {
log.Fatal(err)
}
for InsertTestThing := range channel {
_, err := stmt.Exec(
InsertTestThing.DiscountID,
InsertTestThing.CategoryGroupId,
)
if err != nil {
log.Fatal(err)
}
}
}
func InsertTestInsert() {
db, _ := sql.Open(
"mysql", "localhost")
channel := make(chan InsertTestThing)
go InsertTestFileLoader("InsertTest.csv", channel)
saveInsertTest(channel, db)
defer db.Close()