忽略FK约束

时间:2019-11-18 19:29:11

标签: sql go relational-database

我已经创建了一些应该循环通过.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()

0 个答案:

没有答案